复制活动中调用的存储过程的管道失败-Azure数据工厂V2

时间:2018-11-21 11:59:13

标签: azure azure-data-factory

我们有一个SQL Server存储过程,该过程返回增量记录。如果对该表没有任何更改,则不返回任何内容。存储过程可以完成预期的工作。

我们正在通过Azure数据工厂中的“复制”活动来调用上述存储过程。它适用于所有情况,除非什么都没有返回(空)。

我们正在寻找一个选项,其中从存储过程中返回Nothing(Empty),管道应该跳过并继续进行,并标记整个管道成功而不是失败。

谢谢

3 个答案:

答案 0 :(得分:0)

您的存储过程需要以SELECT结尾,因此它返回一些内容-如果没有要返回的行,则包括一个空集。

但是,如果没有行,要跳过管道,DraganB的最后一个答案很有意义,我必须在当前项目中这样做两次。

答案 1 :(得分:0)

正如@DraganB在评论中所说,活动可以在流中运行,所以您可以执行stored procedure activity --> if activity --> copy activity。如果sp活动的输出为空,则不要运行复制活动并结束管道。

另一个想法,也许您可​​以了解天蓝色函数external table trigger。您可以在表中添加一个状态列,例如needToBeCopied,每个插入或更新操作都会更改该列。然后在运行复制活动时过滤需要复制的数据。

答案 2 :(得分:0)

解决了。真正的问题是复制活动没有返回正确的错误消息。访问控制出现问题。

Grant VIEW CHANGE TRACKING permission on a table to a user:
[sql]
GRANT VIEW CHANGE TRACKING ON OBJECT::dbo.databaselog to username
[/sql]

增量加载方法是通过对SQL Server数据库和所需表启用更改跟踪。 Azure数据工厂应记录为“某某表权限不足”错误。相反,它使整个管道失败,并显示错误消息,因为“存储过程可能无效或存储过程未返回任何输出”。

无论如何,我们分配了正确的权限,此问题已解决。现在,当存储过程没有返回任何输出时,它会创建一个带有标题记录的空文件,同样在-Data Factory Avoiding creation of empty files