在我的Azure Data Lake目录ingest
中,我有以时间戳命名的子目录:
ingest/1510395023/file.tsv
ingest/1510425023/file.tsv
ingest/1510546210/file.tsv
...
在 Azure 数据工厂 v2 复制活动(数据湖到 SQL Server(中,如何将数据湖目录筛选为大于指定时间戳的目录?
假设我将已复制的时间戳记录到 SQL Server 中,并且在下一次管道运行时,我只想根据查找活动复制增量新目录。
数据工厂文档引用逻辑函数,但我不明白如何在这种情况下实现它们。
或者:如果文件名(而不是目录(上有可用的逻辑比较过滤器,那也会很有帮助。
注意:我也想加载历史数据,因此仅过滤大于或等于now
的时间戳是不够的。
我假设您有一个Data Lake Analytics帐户。
使用 U-SQL 活动,可以将目标文件复制到单个文件,然后可以使用复制活动复制该文件。
您可以通过提取文件集并按其虚拟列对其进行筛选来实现此目的。
设@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"复制到你的数据库中。