我有一个包含直到活动的 Azure 数据工厂 v2 管道。
直到内部是一个复制活动 - 如果失败,则会记录错误,就像在这篇文章中一样,我希望循环继续。
尽管内部复制活动的错误得到了处理,但直到活动被认为已失败,因为内部活动已失败。
当内部活动失败时,有什么方法可以配置直到活动继续?
我有一个包含直到活动的 Azure 数据工厂 v2 管道。
直到内部是一个复制活动 - 如果失败,则会记录错误,就像在这篇文章中一样,我希望循环继续。
尽管内部复制活动的错误得到了处理,但直到活动被认为已失败,因为内部活动已失败。
当内部活动失败时,有什么方法可以配置直到活动继续?
解决方案
将错误处理步骤放在它们自己的管道中,并从 ExecutePipeline 活动中运行它们。您需要传入外部管道所需的所有参数。
然后,您可以使用 ExecutePipeline 中的完成(蓝色)依赖项(而不是成功(绿色)),因此尽管存在内部错误,外部管道仍继续运行。
请注意,如果您希望外部知道内部发生了什么,那么目前无法将数据从 ExecutePipeline 传递给其父级(https://feedback.azure.com/forums/270578-data-factory/suggestions /38690032-add-ability-to-customize-output-fields-from-execut)。
要解决此问题,请使用 ExecutePipeline 中的 sp 活动将数据写入 SQL 表,并使用管道运行 ID 进行标识。这可以在管道内部使用@pipeline().RunId
.
然后在管道之外,您可以在 SQL 表中进行查找,使用运行 ID 来获取正确的行。
健康警告:
由于某些奇怪的原因,ExecutePipeline 的输出不是作为 JSON 对象返回,而是作为字符串返回。因此,如果您尝试选择这样的输出属性,@activity('ExecutePipelineActivityName').output.something
则会出现以下错误:
“字符串”类型的值不支持属性选择
因此,要从外部获取 ExecutePipeine 的运行 ID,您需要:
@json(activity('ExecutePipelineActivityName').output).pipelineRunId
我无法在任何地方的 Microsoft 文档中找到此文档,因此在这里发布了血淋淋的细节。