为什么Airflow在不重命名dag的情况下更改start_date?

时间:2019-07-18 14:03:06

标签: python date airflow execution

我是一名数据工程师,并定期处理气流。

当使用新的开始日期重新部署dag时,最佳做法如here所示:

  

请勿更改开始日期+间隔:运行DAG后,调度程序数据库将包含该DAG运行的实例。如果更改start_date或时间间隔并重新部署它,则调度程序可能会感到困惑,因为时间间隔不同或start_date倒退了。解决此问题的最佳方法是,只要更改start_date或时间间隔,即my_dag_v1和my_dag_v1,就应立即更改DAG的版本。这样,还可以保留有关旧版本的历史信息。

但是,删除所有先前的DAG和任务运行后,我尝试重新部署具有新开始日期的dag。它按照预期的方式(以新的开始日期)工作了一天,然后又开始与旧的方式一起使用

这是什么原因?如果可以,请深入了解。

1 个答案:

答案 0 :(得分:1)

Airflow在表dag_run中维护有关过去运行的所有信息。

清除先前的dag运行时,这些条目将从数据库中删除。因此,气流将这个dag视为一个新dag,并在指定的时间开始。

Airflow检查最后一次执行dag的时间(上次运行的start_date),并添加您在timedelta中指定的schedule_interval对象。

如果即使清除dag运行后仍遇到困难,则可以执行以下操作:

  1. 按照建议重命名dag。
  2. 清除所有dag运行,保持dag暂停。创建一个dag运行,然后打开dag。此后它将按计划的时间运行。
  3. 最好的方法是在schedule_interval 中使用crontab表达式。