仅提取U-SQL中的必需文件

时间:2016-12-19 11:57:15

标签: u-sql

是否可以仅提取文件3天,而无需提取所有文件。

 DROP VIEW IF EXISTS dbo.Read;  
 CREATE VIEW IF NOT EXISTS dbo.Read AS


EXTRACT     
    Statements
FROM  
"adl://Test/{date:yyyy}/{date:M}/{date:d}/Testfile.csv"
USING Extractors.Csv(silent:true,quoting : true, nullEscape : "/N");

@res =
SELECT * FROM dbo.Read
WHERE date BETWEEN DateTime.Parse("2015/07/01") AND DateTime.Parse("2015/07/03");

OUTPUT @res
TO "adl://test/Testing/loop.csv"
USING Outputters.Csv();

2 个答案:

答案 0 :(得分:0)

您可以在路径的某些部分甚至部分名称中使用文件集规范中的模式标识符(请参阅https://msdn.microsoft.com/en-us/library/azure/mt771650.aspx)。您可以执行文件列表,因此如果每个目录中只有一个文件,则可以执行此操作;

EXTRACT ...
FROM "adl://Test/2015/07/1/Testfile.csv"
     , "adl://Test/2015/07/2/Testfile.csv"
USING ...;

如果每个目录中有多个文件,您可以为每天执行单独的提取,然后将结果合并。类似的东西:

@a = EXTRACT .... 
     FROM "adl://Test/2015/07/1/{*}.csv"
     USING ...;
@b = EXTRACT ....          
     FROM "adl://Test/2015/07/2/{*}.csv"
     USING ...;
@fullset = SELECT * FROM @a UNION SELECT * FROM @b;

不幸的是,我认为目前没有文件集列表允许您在一个EXTRACT语句中执行上述案例。

答案 1 :(得分:0)

Partition elimination已经确保您的查询只会实际读取匹配谓词的文件(您可以在job graph中确认)。

另请参阅我之前对How to implement Loops in U-SQL

的回答

如果您对性能仍然存在疑虑,那么工作图也可以帮助您确定它们的来源。