我有一个管道,每天从SQLDB表中提取新更新的数据到Data Lake Store中的.tsv文件。
稍后将使用该数据来追加/更新现有表。
为了从SQLDB中只选择新更新的行,我使用sqlReaderQuery从一个带有WHERE子句的表中选择(“WHERE DATEDIFF(day,c.UpdatedOn,GETDATE())= 1”)我只能在执行管道前一天选择已更新的行(c.UpdatedOn)。
问题是: 想象一下,管道暂停一周进行维护。然后,当我恢复管道时,它只会检索在前一周的最后一天添加的行...
有什么方法可以使用系统变量来指示管道上次运行的时间吗?
所以我可以替换系统变量的WHERE子句中的GETDATE(),例如:
WHERE DATEDIFF(day,c.UpdatedOn,DateOfPipelineLastExecution)< 0
谢谢
答案 0 :(得分:0)
每次活动运行时,它都会针对特定的时间窗口运行,您应该使用SQL查询中的SliceStart和SliceEnd变量来提取该窗口的数据。见https://docs.microsoft.com/en-us/azure/data-factory/v1/data-factory-scheduling-and-execution
答案 1 :(得分:0)
正如大卫所说,你应该使用SliceStart和SliceEnd变量,这样每个切片都能为你提供日常所需的信息,无论它执行的是哪一天。对于您给出的示例,如果您停止管道1周然后恢复它,管道将复制对应于每天的7个切片。
你的where子句应该是这样的:
$$Text.Format( 'SELECT ... WHERE DATEDIFF(day,c.UpdatedOn, \\'{0:yyyyMMdd-HH}\\'')=1, SliceEnd)