Airflow 为什么建议不要在气流中使用动态开始日期?

Airflow 为什么建议不要在气流中使用动态开始日期?,airflow,Airflow,我已经阅读了Airflow的常见问题解答,但我仍然不清楚为什么建议不要使用dynamicstart\u date 据我所知,DAG的执行日期由所有DAG任务之间的最小开始日期决定,后续DAG运行以最晚的执行日期+计划间隔运行 如果我将我的DAG的默认参数开始日期设置为(比如)昨天20:00:00,并且计划间隔为1天,这将如何中断或混淆计划程序(如果有的话)?如果我理解正确,调度程序将在昨天的20:00:00触发DAG,下一次DAG运行将安排在今天的20:00:00 是否有我遗漏的一些概念?第一次

我已经阅读了Airflow的常见问题解答,但我仍然不清楚为什么建议不要使用dynamic
start\u date

据我所知,DAG的
执行日期
由所有DAG任务之间的最小
开始日期
决定,后续DAG运行以最晚的
执行日期
+
计划间隔
运行

如果我将我的DAG的
默认参数
开始日期
设置为(比如)昨天
20:00:00
,并且
计划间隔
为1天,这将如何中断或混淆计划程序(如果有的话)?如果我理解正确,调度程序将在昨天的
20:00:00
触发DAG,下一次DAG运行将安排在今天的
20:00:00


是否有我遗漏的一些概念?

第一次运行将在
开始日期+计划间隔时间进行。它不会在
start\u date
上运行dag,它总是在
start\u date+schedule\u interval
上运行


正如他们在文档中提到的,如果您为例如
datetime.now()
提供
start\u date
动态,并提供一些
schedule\u interval
(1小时),它将永远不会执行该运行,因为
now()
随着时间和
datetime.now()移动+1小时
不可能

计划程序希望看到一个固定的开始日期和间隔。如果您更改它,调度程序可能在重新加载DagBag之前不会注意到,如果新的开始日期与旧的调度不一致,它可能会中断,这取决于您过去的行为


如果您不需要依赖,最简单的方法可能是停止使用调度程序,将开始日期设置为任意旧日期,然后使用crontab或类似工具从外部触发DAG。

那么调度程序计算开始日期的频率是多少?每次跑步前它都会计算吗?我想我会被这个弄糊涂了:如果
start\u date
datetime.now()
在时间
t
,那么
t
应该保存在某个地方,对吗?因此,当
t+1
最终出现时,调度程序应该知道开始运行,因为它不计算
start\u date
again@earthican文件中没有明确提到这一点。还有一件事我想说的是,如果您在开始日期或计划间隔中进行任何更改,请始终修改dag的名称,如my_dag_v1或其他内容。如果不更改DAG的名称,则对“开始日期”或“间隔”所做的更改将不起作用。我接受使用
datetime.now()
是一个坏主意,但当我编写一个将在将来的不确定时间部署的DAG时,还有什么替代方法?我有一个场景,我不想设置
start\u time:datetime.datetime(2019,4,29)
每1小时一次,因为如果我在3周内部署它,它将运行21*24=504次,我不希望发生这种情况。@jamiet的一个选项是在创建DAG时设置catchup=False,但这也阻止了追赶,这可能不是你想要的。我所看到的唯一解决方法是适当地设置开始日期。免责声明:刚刚开始使用气流。