通过TriggerDagRunOperator日志触发的Dag与触发dag的开始日期大不相同?

时间:2020-03-09 23:24:39

标签: airflow

看到在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时间区

1 个答案:

答案 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,否则您将获得所看到的行为。

因此,在您的情况下,发生了以下情况:

  • 在“ 2020-03-05 05:00:00”,调度程序为执行Dag的触发器创建了一个DagRun,其execute_date ='2020-03-04 05:00:00'
  • TriggerDagRunOperator任务已运行,并为执行的Dag创建了DagRun,其执行时间为execute_date = nowutc()(如果触发的Dag足够快,则可能非常接近“ 2020-03-05 05:00:00”。