SubDag与调度机制工作原理及启动时间、调度规则问询
关于Airflow SubDAG的start_date和schedule工作机制的清晰解释
我来帮你把这个绕人的点掰明白——当初我刚用SubDAG的时候也被这俩参数搞晕过,完全摸不清和父DAG的关系!
第一个场景:父DAG今日启动,SubDAG的start_date为一周后
敲黑板:SubDAG的start_date不会阻止它随父DAG运行。
因为SubDAG本质上是父DAG中的一个特殊Task,它的触发时机完全由父DAG的调度、依赖关系决定,和自己的start_date无关。哪怕你把SubDAG的start_date设成一年后,只要父DAG运行到这个SubDAG Task,它就会立刻启动执行。
那SubDAG的start_date有啥用?它是给SubDAG内部的Task用的——内部Task会基于这个start_date和SubDAG的schedule来计算自己的execution_date,但这不会影响SubDAG本身被父DAG触发的时间。
第二个场景:父DAG每日运行,SubDAG仅需在周一运行
同样的核心逻辑:SubDAG自己的schedule参数是无效的,它不会控制SubDAG的触发频率。
如果父DAG每天跑,不加任何额外限制的话,SubDAG会跟着父DAG每天都被触发,哪怕你把SubDAG的schedule设成@weekly或者0 0 * * 1都没用。
要实现“SubDAG仅周一运行”的需求,你得在父DAG层面做控制:
- 用
WeekDaySensor:在SubDAG Task前面加一个传感器,只在周一的时候才放行SubDAG执行; - 用
BranchPythonOperator:写个简单的判断函数,检查当前execution_date是不是周一,是就走SubDAG分支,不是就跳过; - 用
ShortCircuitOperator:和分支操作类似,直接判断日期,不满足就短路跳过SubDAG。
总结一下核心规则
SubDAG的start_date和schedule只作用于其内部的Task,用来定义内部Task的执行上下文和调度逻辑;而SubDAG作为父DAG的一个Task,它的触发时机、频率完全由父DAG的调度规则和依赖关系决定,和自身的这两个参数无关。
内容的提问来源于stack exchange,提问作者Tomas Jansson
相关产品推荐
相关产品推荐

