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

Extract only required files in 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();

您可以在部分路径甚至部分名称中使用文件集规范中的模式标识符(参见 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 语句中执行上述情况。

Partition elimination already ensures for your query that only files matching predicates will actually be read (you can confirm that in the job graph).

另请参阅我之前对

的回答

如果您对绩效仍有疑虑,职位图表还可以帮助您确定它们的来源。