You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Great Expectation设is_blocking=False验证失败仍中止,如何仅发通知不中断流程

你遇到的任务中止问题和Great Expectations(以下简称GE)侧的is_blocking: False配置无关,从报错栈可以看到,是你使用的自定义GreatExpectationsNotificationOperator在验证失败后主动抛出了AirflowException,才导致任务被标记为失败,下游任务无法执行。

解决方案

方案1:修改自定义Operator逻辑(推荐)

你可以直接修改great_expectations_notification_operator.py的代码,新增验证失败是否中止的控制开关:

  • 在Operator的__init__方法中新增参数fail_on_validation_error: bool = True,默认保持原有逻辑,兼容其他使用场景
  • 调整execute方法的异常抛出逻辑,仅当fail_on_validation_error为True时才抛出异常:
# 原代码(第79行附近)
if not validation_passed:
    send_slack_notification(message)
    raise AirflowException(message)

# 修改后代码
if not validation_passed:
    send_slack_notification(message)
    if self.fail_on_validation_error:
        raise AirflowException(message)
    self.log.info(f"数据验证失败,已发送通知,按配置不中止任务:{message}")

后续你需要仅通知不中止的任务,在初始化Operator时传入fail_on_validation_error=False即可。

方案2:无需修改代码,直接调整Airflow任务配置

如果没有修改Operator的权限,可以用Airflow原生参数实现需求:

  • 给GE监控任务添加soft_fail=True参数,该参数会将任务的所有失败状态转为跳过状态,不会标记为DAG运行失败
  • 给下游任务设置trigger_rule="none_failed",只要上游没有标记为失败的任务就会正常执行,上游任务为跳过状态不影响下游运行

注意:该方案会把GE任务的所有异常(包括代码错误、权限错误、查询超时等非验证失败的异常)都转为跳过状态,适合你确认GE任务不会出现验证失败以外的错误的场景。

方案3:切换为官方GE Operator

如果你当前用的是自定义Operator,也可以切换为Airflow官方提供的GreatExpectationsOperator,官方Operator原生支持fail_task_on_validation_failure参数,直接设置为False即可实现验证失败仅发通知、不中止任务的需求。

内容的提问来源于stack exchange,提问作者Jack Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 22:36:07