气流计划时间表间隔未触发DAG

时间:2019-02-22 15:45:19

标签: python cron airflow directed-acyclic-graphs

注意:crontab.guru链接断开了,所以我将它们包装在代码块中。

我有一个DAG,该DAG将在太平洋标准时间星期一,太平洋标准时间上午8点执行,碰撞1分钟以免发生任何重叠问题。

最初,计划时间间隔设置为1 8 */1 * 1,根据https://crontab.guru/#1_8_*/1_*_1,该时间间隔是“如果在每个月的每天的08:01 UTC(美国东部标准时间03:01,00:01 PST),星期一”。

但是,这导致DAG每天在世界标准时间08:01触发;星期一的情况似乎被忽略了。

计划时间间隔已更新为更简单的1 8 * * 1,根据https://crontab.guru/#1_8_*_*_1,该时间间隔是“星期一的08:01 UTC(美国东部标准时间03:01,PST 00:01)”。

这停止了DAG每天的执行,但它没有在更新之后的第一个星期一的2019-02-18触发。我读过其他一些文章,指出开始日期可能会导致此问题,但是此任务的开始日期为datetime(2019, 2, 11, 0, 0, 0, 0, pytz.UTC),这是2019-02-18运行日期之前的两个时间间隔。

这是完整的DAG /任务定义(没有导入或特定名称):

dag = DAG(
    dag_id="dag",
    description="dag",
    # At 08:01 UTC (03:01 EST, 00:01 PST) on Monday
    # (https://crontab.guru/#1_8_*_*_1)
    schedule_interval="1 8 * * 1",
    catchup=False,
)


task = PythonOperator(
    task_id="handle",
    provide_context=True,
    python_callable=handle,
    dag=dag,
    retries=2,
    retry_delay=timedelta(minutes=15),
    start_date=datetime(2019, 2, 11, 0, 0, 0, 0, pytz.UTC),
)

有人知道为什么在UTC时间间隔2019-02-18 00:01之后不执行此操作吗?

1 个答案:

答案 0 :(得分:0)

编辑: 您没有在18号看到运行的原因是您有catchup=False

如果已经过去,这将导致DAG跳过回填天数。如果要在第17号和第24号中看到DAG,则需要设置catchup=True

气流DAG在计划间隔 END 执行,因此,如果您的开始日期是当前星期一,而间隔是每个星期一,则DAG将不会执行这个星期一的运行直到下一个星期一。

这里的主要思想是当前星期一运行的数据现在可以使用,直到该间隔时间结束为止。从日常工作的角度来看,这更有意义。如果您正在运行的工作正在寻找今天的数据,则该数据集要到今天结束才能完成。因此,如果要今天运行数据,则明天需要执行作业。不管您喜欢与否,这只是Airflow采纳的一项约定。

如果您想调整日期,可以使用{{ macros.ds_add( ds, 7) }}将执行日期移动7天。

让我知道这个答案是否有意义。如果没有的话,我会继续讨论。这个约定是我们在开发Airflow工作时必须处理的最琐碎的细节。