我有数千个包含从2016年1月到今天的csv文件。我想加载2016年11月25日到2017年1月2日的所有文件。
我知道我可以像下面这样使用虚拟路径,但这不会从磁盘加载所有数据吗?我只想要上面这段时间的数据。添加@result查询(修改为我的时间段)是否可以确保只将我感兴趣的文件加载到内存中?
DECLARE @file_set_path2 string = @dir + "{date:yyyy}/{date:MM}/{date:dd}/{date:MM}{date:dd}{date:yyyy}.csv";
@data =
EXTRACT vala int,
valb long,
valc DateTime,
date DateTime // virtual file set column
FROM @file_set_path2
USING Extractors.Csv();
@result =
SELECT *
FROM @data
WHERE date > DateTime.Parse("2016-11-24")
AND date < DateTime.Parse("2017-01-03");
发布于 2017-06-21 04:24:53
如果谓词与编译器可以看到的值(例如,常量、常量可折叠表达式或脚本参数)进行比较,并且谓词可以移动(例如,在用于连接的谓词中使用and而不是&& ),那么优化器将只接触指定范围内的文件。所以上面的查询应该没问题。
如果谓词不是上述之一,您应该会收到警告。
如果您不了解此行为,请让我知道。
https://stackoverflow.com/questions/44662077
复制相似问题