如何将Azure Data Factory中Execute Pipeline内的Notebook错误传递到外部?
Azure Data Factory 批量Notebook错误告警解决方案
下面提供几种无需给每个Notebook单独加失败分支的实现方案,满足你捕获错误并触发邮件告警的需求:
方案1:主管道统一捕获子管道错误
适合将错误处理逻辑与业务逻辑分离的场景:
- 子管道配置(包含多个写入表的Notebook):
- 添加一个字符串类型的输出参数(比如
errorDetails)。 - 将所有Notebook放入一个
Sequence活动中,给该Sequence添加失败分支:在分支里用Set Variable活动将errorDetails赋值为@string(pipeline().Error)(包含失败活动名称、错误信息等完整内容),随后设置子管道失败。
- 添加一个字符串类型的输出参数(比如
- 主管道配置:
- 添加
Execute Pipeline活动指向子管道,开启Wait On Completion。 - 给这个
Execute Pipeline活动添加失败分支:- 调用发送邮件的Databricks Notebook活动,配置Widget参数(比如
error_msg)的值为@activity('Execute Child Pipeline').output.errorDetails,直接传递子管道输出的错误信息。
- 调用发送邮件的Databricks Notebook活动,配置Widget参数(比如
- 添加
方案2:子管道内统一处理错误
适合在业务管道内直接完成告警的场景:
- 将所有写入表的Notebook放入一个
Sequence活动中。 - 给
Sequence活动添加失败分支:- 调用邮件Notebook活动,将Widget参数值设为
@concat('失败活动:', pipeline().Error.ActivityName, '\n错误信息:', pipeline().Error.Message, '\n详细内容:', string(pipeline().Error)),直接拼接详细错误信息。
- 调用邮件Notebook活动,将Widget参数值设为
- 只要
Sequence内任意Notebook失败,就会触发告警分支,无需给单个Notebook配置分支。
方案3:简化版错误传递(无需子管道输出参数)
如果不需要自定义错误格式,可直接利用ADF系统变量在主管道的失败分支中传递错误:
在主管道的Execute Pipeline失败分支里,邮件Notebook的Widget参数直接使用表达式:
@string(activity('Execute Child Pipeline').error)
该表达式会返回子管道失败的完整错误对象,包含所有相关信息。
关键注意事项
- 确保邮件Notebook已通过
dbutils.widgets.get("error_msg")(对应你设置的参数名)实现接收错误信息的逻辑。 - 所有
Execute Pipeline活动需开启Wait On Completion,才能正确捕获失败状态并触发分支。
内容的提问来源于stack exchange,提问作者Tiago
相关产品推荐
相关产品推荐

