Airflow调度DAG用LatestOnlyOperator时如何重跑非最新dagrun?
重跑非最新历史DAG Run的实操方法
核心逻辑说明
LatestOnlyOperator的判定是在任务被调度执行的瞬间触发的:它会对比当前DAG Run的逻辑执行日期,如果判定当前运行不是DAG下时间最新的一次有效调度,就会直接跳过自身和所有关联的下游任务。常规重跑操作失效,本质就是重跑时该算子会被重新触发判定流程,直接把非最新的DAG Run全链路置为skipped。
具体操作步骤
- 先定位到要重跑的目标历史DAG Run,找到链路里作为首个任务的
LatestOnlyOperator,手动把它当前的运行状态从skipped/success修改为removed,从调度层面切断它和本次重跑流程的关联。 - 选中你期望作为重跑起点的下游任务节点,单独清空这些节点及后续需要重跑的任务状态,清空时务必取消勾选「包含上游任务」「递归清空全链路依赖」的选项,绝对不要把
LatestOnlyOperator纳入本次清空范围,防止它被重新拉回执行队列触发skip逻辑。 - 如果场景要求必须保留
LatestOnlyOperator的完整执行记录,不能直接移除它的调度状态,可以给该算子加一层临时短路判断:读取当前DAG Run的传入参数,如果匹配到强制重跑的标记值,就直接让该算子返回成功结果,跳过默认的最新性校验,等本次重跑完成后再删除这段临时逻辑即可。
踩坑提示:如果操作时不小心把
LatestOnlyOperator纳入了重跑的任务范围,它会在执行的第一时间把所有下游任务全部置为skipped,需要重新回到第一步调整该任务的状态才能继续后续操作。
内容的提问来源于stack exchange,提问作者Ofek Hod
相关产品推荐
相关产品推荐

