我已经阅读了关于"What's the deal with start_date
?"的Airflow常见问题解答,但我仍然不清楚为什么建议不要使用动态start_date
。
据我了解,DAG的execution_date
由所有DAG任务之间的最小start_date
确定,后续DAG运行最迟运行{{} 1}} + execution_date
。
如果我将我的DAG schedule_interval
default_args
设置为昨天start_date
,{1}}为1天,那该怎么办?打破或混淆调度程序,如果有的话?如果我理解正确,调度程序将在20:00:00
处触发昨天schedule_interval
的DAG,并在execution_date
安排下一次DAG运行。
是否有一些我不知道的概念?
答案 0 :(得分:5)
首次运行将在start_date+schedule_interval
。它不会在start_date
上运行dag,它始终在start_date+schedule_interval
上运行。
正如他们在文档中提到的那样,如果你给start_date
动态,例如datetime.now()
并提供一些schedule_interval
(1小时),因为now()
随时间移动而datetime.now()+ 1 hour
无法移动,所以永远不会执行该次
答案 1 :(得分:0)
调度程序期望看到一个恒定的开始日期和间隔。如果您更改它,调度程序可能会在重新加载DagBag之前不会注意到,如果新的开始日期与旧的日程安排不一致,则可能会破坏depends_on_past行为。
如果您不需要depends_on_past,最简单的方法可能是停止使用调度程序,将开始日期设置为某个任意旧日期,然后从外部触发DAG,但是您喜欢使用crontab或类似日期。