首页/数据/数据工程与 ETL 速查/Airflow 分支与触发规则

Airflow 分支与触发规则

BranchPythonOperator 按条件选择走哪条分支,未选中分支标记 skipped;trigger_rule 控制上游处于什么状态才执行本任务,如 all_success、all_done、one_failed。

分支与触发规则是什么

分支解决「走哪条路」:BranchPythonOperator 或 @task.branch 返回下游 task_id,被选中的分支继续执行,未选中的分支被标记为 skipped。触发规则(trigger_rule)解决「上游处于什么状态才执行本任务」,默认 all_success。两者最容易出问题的地方是组合场景:上游一旦有 skipped,默认规则会把下游也跳过,包括本该无条件执行的收尾与告警任务。

基本信息

分支算子BranchPythonOperator、@task.branch(返回下游 task_id 或其列表)
跳过语义未选中的分支状态为 skipped,不是失败
常用触发规则all_success(默认)、all_done、all_failed、one_success、one_failed、none_failed、none_failed_min_one_success、always
收尾任务清理与通知类任务用 all_done,保证无论成败都执行
适用平台Apache Airflow 2.x(规则集合随版本略有扩充)

典型使用场景

  • 按数据量分流:全量分支与增量分支二选一执行
  • 环境分流:生产走正式链路,测试走抽样链路
  • 上游文件存在性判断:有文件走加载,无文件走告警分支
  • 收尾清理:无论成功失败都要执行临时表清理,用 all_done
  • 告警兜底:任一上游失败即发送告警,用 one_failed 或 all_done
  • 多分支汇聚:汇聚后的下游须用 none_failed_min_one_success,否则被跳过

分支与收尾示意

分支与收尾示意
from airflow.operators.python import BranchPythonOperator
from airflow.utils.trigger_rule import TriggerRule

choose = BranchPythonOperator(task_id="choose", python_callable=pick_route)
# pick_route 返回 "full" 或 "incr",未选中的分支变为 skipped
full = PythonOperator(task_id="full", python_callable=full_load)
incr = PythonOperator(task_id="incr", python_callable=incr_load)

# 收尾清理不受分支跳过影响,必须用 all_done
clean = PythonOperator(task_id="clean", python_callable=clean_tmp,
                       trigger_rule=TriggerRule.ALL_DONE)
choose >> [full, incr] >> clean

触发规则选择

规则何时执行典型用途
all_success所有上游成功默认,普通串联任务
all_done所有上游结束(不论状态)清理临时表、发汇总通知
one_failed任一上游失败即执行失败告警
none_failed没有失败即执行(允许 skipped)分支汇聚后的下游
none_failed_min_one_success无失败且至少一个成功多分支汇聚汇总任务
always无条件执行审计留痕类任务
默认规则是 all_success:上游存在 skipped 时下游同样被跳过。多条分支汇聚时用 none_failed_min_one_success,收尾任务用 all_done,是最常见的两处修正。
用 all_success 做告警任务,恰好在上游失败时不触发,告警形同虚设:失败通知类任务应使用 all_done 或 one_failed。

易错点

  • 分支函数返回值不是下游 task_id(拼错或返回任务对象),任务直接失败或报找不到下游
  • 忘记 skipped 会传染:未选中的分支导致后续所有任务一起跳过,表现为「什么都没跑」
  • 告警任务使用 all_success,上游失败时反而不告警,故障被静默
  • 多分支汇聚处沿用默认规则,运行成功但汇总任务永远不执行
  • 分支逻辑写在算子内部而不返回值,调度器无法据此选择路径,依赖图被破坏

数据来源与参考

  • Apache Airflow 官方文档:Branching 与 Trigger Rules
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌