为什么建议不要在Airflow中使用动态start_date?

时间:2016-12-14 03:44:35

标签: airflow

我已经阅读了关于"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运行。

是否有一些我不知道的概念?

2 个答案:

答案 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或类似日期。