2017-06-20 10 views
0

我有成千上万的csv文件,包含从2016年1月到今天的跨越。 我想加载从2016年11月25日到2017年1月02日的所有文件。u-sql:在u-sql脚本中加载文件

我知道我可以使用如下的虚拟路径,但是不会从磁盘加载所有数据?我只需要上述期间的数据。将添加@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");

回答

1

如果断言是对值编译器可以看到(例如,常量,常量可折叠表达式或脚本参数)比较和谓语可以移动(例如,你可以使用AND和而不是& &在连词的谓词中),那么优化器将只触及指定范围内的文件。所以上面的查询应该没问题。

如果谓词不是上述之一,您应该会收到警告。

如果你没有得到这种行为,请让我知道。