在Apache Airflow中,为什么执行日期与触发时间不同



我只是在学习Apache Airflow。我知道执行日期与触发dag运行的实际时间不同。

请注意,如果您在一天的schedule_interval上运行DAG,则标记为2016-01-01的运行将在2016-01-01T23:59之后不久触发。换句话说,一旦作业实例所覆盖的时间段结束,它就会启动。

让我们重复一遍调度程序在开始日期后的一个schedule_interval,即周期结束时运行作业。

我谦虚地问:有人知道这个决定的原因吗?用这个名字来称呼开始日期似乎很令人困惑,从开始日期开始到底是什么?在执行日期执行了什么?

来自相同的文档:

对于具有cron或timedelta调度的dag,调度程序不会触发你的任务,直到它所涵盖的时期结束。例如日程设置为@每天在一天结束后运行这项技术确保该期间所需的任何数据都是完整的在执行DAG之前可用

您可以将开始日期视为您给出时间表的日期,以便让它知道何时应该开始应用上述逻辑,以便安排您的dag。

借用最新气流版本的文档片段(因为它可以澄清问题(

Airflow是为ETL需求开发的解决方案。在ETL世界中,您通常会汇总数据。因此,如果你想总结2016-02-19的数据,你应该在2016-02-20 UTC午夜进行,这将是在2016-02-19所有数据可用之后。2016-02-19和2016-02-20午夜之间的间隔称为数据间隔

这意味着,在开始日期为2016-02-19的每日计划中,假设现实生活中的当前日期只是第二天2016-02-20,那么应该只有一个dag运行:

执行日期=2016-02-19,数据间隔2016-02-19->2016-02-20

但如果我们有一个不同的2016-02-18开始日期,这将导致2 dag运行:

  • 执行日期=2016-02-18,数据间隔2016-02-18->2016-02-19
  • 执行日期=2016-02-19,数据间隔2016-02-19->2016-02-20

因此,

开始日期究竟是什么?

我猜没有什么,它是调度逻辑的参考时间点。它应该什么时候开始安排dag运行!

在执行日期执行什么?

如果这是第一次dag运行,再次,什么都没有:(

否则,你总是可以假设dag运行与";先前的";执行日期。

为了减少混乱,你可以考虑数据间隔,而不是这里提到的单一执行日期

但是,如果可能的话,您应该始终使用data_interval_start或data_interval_end,因为这些名称在语义上更正确,不太容易引起误解。

希望这能有所帮助。

最新更新