首页/数据/数据工程与 ETL 速查/手动触发与参数覆盖

手动触发与参数覆盖

手动触发用于补单、验证与应急:触发时显式传入业务日期等参数,并在记录中留下原因;绝不能依赖默认参数直接开跑,避免覆盖当天正在跑的数据。

手动触发是什么

手动触发用于补单、灰度验证与故障应急:绕过定时计划立即跑一次任务,并在触发时显式传入业务日期等参数。它本身不是问题,问题出在「不传参数直接触发」——调度器会取默认日期,很容易覆盖当天正在跑的分区。因此手动触发有两条硬要求:参数显式传入、原因留痕记录。

基本信息

适用平台Airflow(CLI 与界面)、DolphinScheduler(界面补数与重跑)、其他调度类似
关键参数业务日期或分区、运行标识,避免使用默认值
触发方式Airflow 用 airflow dags trigger,界面 Trigger DAG with config
留痕内容触发人、触发时间、原因、影响分区与预期结果
并发风险手动实例与定时实例可能同时写同一分区

典型使用场景

  • 补单:上游延迟导致某天分区未产出,指定日期重跑该分区
  • 应急止损:线上数据错误需立即重算,不等下一个调度周期
  • 灰度验证:新逻辑先在单个分区试跑,确认结果再放开全量
  • 联调测试:开发环境按指定日期跑通整条链路
  • 故障复现:按当时参数重跑,验证修复方案是否有效

Airflow 手动触发

Airflow 手动触发
# 传入业务日期,避免取默认值覆盖当天数据
airflow dags trigger daily_orders \
  --conf '{"bizdate": "2026-10-11", "reason": "upstream_delay"}'

# 指定执行日期与逻辑运行标识,便于回溯定位这一次运行
airflow dags trigger daily_orders --exec-date 2026-10-11T00:00:00+08:00

# 确认这次运行是否已进入队列,以及历史运行记录
airflow dags list-runs -d daily_orders | head
airflow tasks states-for-dag-run daily_orders <run_id>

参数覆盖风险对照

做法风险建议
不传参数直接触发取默认日期,可能覆盖当天正在跑的数据必须显式传业务日期
手工改代码后重跑代码与线上版本不一致,结果不可复现走发布流程,再触发
同一分区并发触发两次两实例写同一分区,结果取决于完成顺序先确认无运行中实例,再触发
应急触发无记录复盘时无法还原现场与影响面记录原因、影响分区与执行人
手动触发前先确认目标分区没有正在运行的任务:定时实例与手动实例同时写同一分区时,最终结果取决于完成顺序,事后对账也无法还原。
只对单个任务做调试时可用 airflow tasks test(本地执行、不写调度元数据),它不会产生真实的运行记录,因此不能替代生产补数。

易错点

  • 不传参数的手动触发取默认日期,直接覆盖当天数据,是补数事故最常见的来源
  • 应急触发没有记录原因与影响范围,复盘时无法还原现场
  • 在代码未发布的情况下手工改脚本重跑,结果与线上逻辑不一致且不可复现
  • 同一分区被定时实例和手动实例并发写入,数据出现混合版本
  • 用调试命令替代生产补数,任务显示成功但调度元数据里没有任何运行记录

数据来源与参考

  • Apache Airflow 官方文档:CLI(dags trigger)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌