我有一个包含 Until 事件的 Azure 数据工厂 v2 管道。
until 内部是复制事件 - 如果失败,则会记录错误,与本文中的完全相同,并且我希望循环继续。
Azure Data Factory Pipeline 'On Failure'
虽然内部复制事件的错误已得到处理,但 until 事件被视为失败,因为内部事件已失败。
是否有任何方法可以配置直到事件在内部事件失败时继续?
最佳答案
解决方案
将错误处理步骤放入其自己的管道中,并从 ExecutePipeline 事件运行它们。您需要传入外部管道所需的所有参数。
然后,您可以使用 ExecutePipeline 中的完成( azure )依赖项(而不是成功(绿色)),以便外部管道在出现内部错误的情况下继续运行。
请注意,如果您希望外部知道内部发生了什么,那么当前无法将数据从 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
那么您会收到以下错误:
“String”类型的值不支持属性选择
因此,要从外部获取 ExecutePipeine 的运行 ID,您需要:
@json(activity('ExecutePipelineActivityName').output).pipelineRunId
我在任何地方的 Microsoft 文档中都找不到此记录,因此在此发布血淋淋的详细信息。
关于Azure数据工厂: Handling inner failure in until/for activity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62001161/