0

我有一个管道,每天将新更新的数据从 SQLDB 表中提取到 Data Lake Store 中的 .tsv 文件中。

该数据稍后将用于附加/更新到现有表。

为了仅从 SQLDB 中选择新更新的行,我使用 sqlReaderQuery 从最后带有 WHERE 子句 ("WHERE DATEDIFF(day,c.UpdatedOn,GETDATE())=1") 的表中进行选择,这允许我选择仅在管道执行前一天已更新 (c.UpdatedOn) 的行。

问题是:假设管道暂停 1 周进行维护。然后,当我恢复管道时,它只会检索在前一周的最后一天添加的行......

有什么方法可以使用系统变量来指示管道上次运行的时间?

因此,我可以将 WHERE 子句中的 GETDATE() 替换为系统变量,例如:

WHERE DATEDIFF(day,c.UpdatedOn,DateOfPipelineLastExecution)<0

谢谢

4

2 回答 2

0

https://docs.microsoft.com/en-us/azure/data-factory/v1/data-factory-functions-variables#data-factory-system-variables

正如 David 所说,您应该使用 SliceStart 和 SliceEnd 变量,以便每个切片都能为您提供每天所需的信息,无论它在哪一天执行。对于您给出的示例,如果您将管道停止 1 周然后再恢复,则管道将复制对应于每天的 7 个切片。

您的 where 子句应如下所示:

$$Text.Format( 'SELECT ... WHERE DATEDIFF(day,c.UpdatedOn, \\'{0:yyyyMMdd-HH}\\'')=1, SliceEnd)
于 2017-12-29T14:50:32.760 回答
0

每次您的活动运行时,它都会针对特定的时间窗口运行,您应该在 SQL 查询中使用 SliceStart 和 SliceEnd 变量来提取该窗口的数据。请参阅https://docs.microsoft.com/en-us/azure/data-factory/v1/data-factory-scheduling-and-execution

于 2017-12-29T13:23:36.243 回答