在我的 Azure Data Lake 目录ingest
中,我有时间戳命名的子目录:
ingest/1510395023/file.tsv
ingest/1510425023/file.tsv
ingest/1510546210/file.tsv
...
在 Azure Data Factory v2 复制活动( Data Lake 到 SQL Server )中,如何过滤 Data Lake 目录是否大于指定的时间戳?
假设我将已经复制的时间戳记录到 SQL Server 中,并且在下一次管道运行时,我只想根据查找活动
数据工厂文档引用logical functions,但我不明白如何在这种情况下实现它们。
或者:如果文件名上有逻辑比较过滤器,而不是目录,那么这也是有用的。
注意:我也想加载历史数据,因此仅过滤大于或等于now
的时间戳是不够的。
答案 0 :(得分:2)
我假设您有一个Data Lake Analytics帐户。
使用U-SQL活动,您可以将目标文件复制到单个文件,然后可以使用复制活动进行复制。
您可以通过提取file set并按其虚拟列过滤来完成此操作。
让@timestamp
字符串作为输入参数,该参数是通过查找活动获得的,并且是已经处理的最新时间戳:
@delta =
SELECT Col1, Col2
FROM(
EXTRACT
[Col1] string,
[Col2] string,
[Timestamp] string
FROM "ingest/{Timestamp}/file.tsv"
USING Extractors.Tsv(skipFirstNRows : 1/* change if the header is not part of the file*/)
) AS T
WHERE long.Parse([Timestamp]) > long.Parse(@timestamp);
OUTPUT @delta
TO "delta/file.tsv"
USING Outputters.Tsv(outputHeader : true);
从那里你可以将“delta / file.tsv”复制到你的数据库。