如何防止在SQL Server源头没有找到记录时,将数据复制到Azure Data Lake中的Copy Activity exeuction

How to prevent Copy Activity exeuction when there is no records found at SQL Server source to copy the data into Azure Data Lake


问题

大家好,

大家好!

在ADF中,我们有一个要求,就是使用SQL Server变更跟踪功能对多个表进行增量数据移动。然而,作为需求的一部分,我们每隔1小时就会触发这个管道,但在大多数情况下,只有很少的表有变化捕获,或者有时所有的表都没有记录可以从源端处理。因此,在这种情况下,我们的主要目标是避免复制活动的执行,如果该特定的表在源头没有变化集,只有复制数据才能在源头为该表捕获变化,或者在某些情况下,如果所有的表在源头没有变化数据,那么每个表的复制活动执行应该作为管道的一部分被避免。

总的来说,当没有记录需要从源头处理时,这将有助于定价的成本效益,不会发生复制活动。

如果有人能帮助提供解决方案以满足要求,我将不胜感激。

感谢您的期待!!

最好的问候,
Mahammad Khan

答案1

你好,欢迎来到微软的Q&A。

为了只在数据存在时运行复制活动,我们首先需要知道数据是否存在。这可以通过使用一个Lookup活动来获得改变集中的行数来完成,可以通过一个存储过程或查询来实现。在 Lookup 活动之后,使用一个以 Lookup 的结果为条件的 If 活动来运行 Copy 活动。

由于你正在做多个表,还有一个选择。在你的SQL中创建一个存储过程,该存储过程返回已准备好更改的表的名称。
使用一个Lookup活动来调用这个存储过程并获取这些表的名字。
然后使用一个ForEach活动来遍历每个表的名字,把它传递给Copy活动中的参数化数据集。这样就只有那些有变化的表被复制了。

请让我知道这是否有帮助,或者你是否需要进一步澄清。

谢谢你,我试着用查找活动来获取基于变更跟踪最后和当前版本的各表的记录数,然后我添加了If条件来检查是否且只有各表的变更记录数大于0,然后只运行Copy活动和SP活动来更新SQL服务器表中的变更跟踪版本。谢谢你的建议。