【问题标题】:Data Lake Analytics FileSet Max数据湖分析 FileSet Max
【发布时间】:2018-02-12 15:43:47
【问题描述】:
在我的 Azure Data Lake 目录ingest 中,我有编号的文件:
ingest/file1.tsv
ingest/file2.tsv
ingest/file3.tsv
在 Azure 数据工厂 v2 U-SQL 活动中,如何仅在 FileSet 中编号最高的文件上运行 Extractors.Tsv()?
【问题讨论】:
标签:
azure-data-factory
azure-data-lake
u-sql
【解决方案1】:
一种方法需要两个脚本:
脚本 1 将使用文件集功能获取最大值,然后将第二个脚本创建为文件(您存储在 WASB 帐户中,除非 ADF 现在也允许您在 ADLS 中引用脚本)。
然后执行脚本2。
另一种方法是使用 ADLS SDK 获取最高数字,然后将该值传递给脚本,该脚本使用在数字上设置的文件,如下所示:
DECLARE EXTERNAL @fileno int;
@d = EXTRACT ..., fileno int
FROM "ingest/file{fileno}.tsv"
USING Extractors.Tsv();
// predicate will be pushed into EXTRACT statement.
@d = SELECT * FROM @d WHERE fileno == @fileno;
单个脚本中语法上最简单的解决方案如下:
@d = EXTRACT ..., fileno int
FROM "ingest/file{fileno}.tsv"
USING Extractors.Tsv();
@maxfno = SELECT DISTINCT(MAX(fileno)) AS maxno FROM @d;
@d = SELECT * FROM @d JOIN @maxfno ON fileno == maxno;
但该语句不是恒定可折叠的,因此无论如何您都会读取所有文件。