气流为什么调度程序无法启动我的DAG?

时间:2018-07-01 12:24:26

标签: airflow

我有以下Dag: enter image description here

第一个0 1 * * *的Dag毫无问题地运行了。结束DAG 0 10 1 * * 没有运行。 当我这样做时:

import datetime
print datetime.datetime.now()

我得到:

2018-07-01 12:14:15.632812

所以我不明白为什么尚未安排此DAG。据我了解,并非必须严格在10:00运行,但统计信息应为Running

根据第一个任务的“最新运行”,是2018-06-30 01:00,我怀疑我实际上并不了解气流时钟。从我的角度来看,最后一次运行是在2018-07-01 01:00上,因为它是今天早上而不是昨天运行的。

编辑: 我在documntation看到了这一段:

”,请注意,如果您以一天的schedule_interval运行DAG,则在2016-01-01T23:59之后将立即触发标记为2016-01-01的运行。换句话说,一旦涵盖的期限已经结束。“

所以我想知道..我应该将所有时间安排在我想要的实际日期的前一天吗? 因此,如果我确实希望某事在0 10 1 * *上运行,应该将其安排到0 10 30 * *吗?换句话说,如果我想在每个月的10:00运行某些内容,我应该将其安排在每个月的10:00的最后一天吗?

其中的逻辑在哪里?这很难理解和遵循。

根据this的说法,情况变得更糟,无法将调度程序的信息告知调度程序。我该怎么办?!

1 个答案:

答案 0 :(得分:8)

Airflow计划任务以计划时间间隔的 END 运行。这可能有点反常,但是基于这样的想法,即在该时间间隔结束之前,特定时间间隔的数据才可用。

假设您的工作流应该每天运行。在当天(今天)结束之前,您无法获取昨天的所有数据。

在您的情况下,第一个DAG的上次运行是在昨天才有意义,因为那是与该DagRun相关的“ execution_date”-您的DAG在今天运行了昨天的数据。

如果您希望DAG在每个月的1号运行,那么更改计划并不是一个坏主意。但是,如果您希望DAG运行每个月1号的关联数据(即将该日期传递到API请求或SQL查询中),那么就正确了。