看到在cron计划上运行dag时出现的怪异问题
0 5 1,3-31 * *
(请注意,我仍在使用UTC时间(因为我不相信我可以在v1.10.7中更改它))以运行TriggerDagRunOperator任务结束。 运行“触发” dag时,“上次运行”日期显示正确的日期,并反映在run_id中。例如
2020-03-04 05:00
但是,触发的dag显示的上次运行日期为1天,这种意外行为也反映在触发的dag的run_id中
2020-03-05 05:00
但是触发dag只需要大约1分钟。运行。
有人知道这里会发生什么吗? 我在这里没有认识到时差吗(请注意,我不是住在UTC时间区
答案 0 :(得分:0)
来自对气流email list ...的讨论
已触发DAG的执行日期与 预定的DAG(我不由自主地解决了这个不一致问题 在Airflow 2.0中通过摆脱奇怪的Scheduled DAG逻辑):
已触发DAG的执行日期为实际运行时间或指定的执行时间。例如说您将其设置为在 2020-03-06 12:00:00然后就是执行日期。
计划的DAG的执行日期符合DAG正在处理数据的“期间”的逻辑。例如,如果你 安排每天运行在中午,然后在2020-03-06运行 12:00:00认为安排的时间段为2020-03-05 12:00:00(含)至2020-03-06 12:00:00(不含),然后 给您执行日期为2020-03-05 12:00:00
您可以看到,即使它们的实际执行时间相同, 他们的执行日期相隔1天。
触发的DAG无法提供与预定DAG相同的逻辑 因为它没有确定“期间”的时间表。我创造了 不管我是否执行,宏都会赋予我相同的执行日期 在使用计划的或触发的DAG时,可以使用上述SO答案 作为模板,如果您想这样做的话,要记住的是 预定DAG的下一个执行日期等于 触发的DAG执行日期
默认情况下,TriggerDagRunOperator创建一个执行日期为utcnow()
的DagRun,它不继承触发Dag的execution_date。
除非您将非默认值传递给TriggerDagRunOperator,否则您将获得所看到的行为。
因此,在您的情况下,发生了以下情况: