Airflow 未回填最新运行

2023-11-29

由于某种原因,Airflow 似乎不会触发具有每周计划间隔的 dag 的最新运行。

当前日期:

$ date
$ Tue Aug  9 17:09:55 UTC 2016

DAG:

from datetime import datetime
from datetime import timedelta

from airflow import DAG
from airflow.operators.bash_operator import BashOperator

dag = DAG(
    dag_id='superdag',
    start_date=datetime(2016, 7, 18),
    schedule_interval=timedelta(days=7),
    default_args={
        'owner': 'Jon Doe',
        'depends_on_past': False
    }
)

BashOperator(
    task_id='print_date',
    bash_command='date',
    dag=dag
)

运行调度程序

$ airflow scheduler -d superdag

您预计总共会进行四次 DAG 运行,因为调度程序应在 7/18、7/25、8/1 和 8/8 回填。 不过,最后一次运行尚未安排。

Airflow DAG Runs

enter image description here

EDIT 1:

我理解 Vineet,尽管这似乎不能解释我的问题。

在上面的示例中,DAG 的开始日期是 7 月 18 日。

  • 第一次 DAG 运行:7 月 18 日
  • 第二次 DAG 运行:7 月 25 日
  • 第三次 DAG 运行:8 月 1 日
  • 第四次 DAG 运行:8 月 8 日(未运行)

每次 DAG 运行都会处理上周的数据。

今天是 8 月 9 日,我预计第四次 DAG 运行会以 8 月 8 日的执行日期执行,该运行处理上周(8 月 1 日至 8 月 8 日)的数据,但事实并非如此。


Airflow 始终安排前一时段的时间。因此,如果您有一个 dag 计划每天在 8 月 9 日运行,它将安排执行日期为 8 月 8 日运行。同样,如果计划间隔是每周,那么在 8 月 9 日,它将安排 1 周前的时间,即 8 月 2 日,尽管这会在 8 月 9 日本身运行。这只是气流簿记。您可以在气流维基中找到它(https://cwiki.apache.org/confluence/display/AIRFLOW/Common+Pitfalls):

了解执行日期 Airflow 是作为 ETL 需求的解决方案而开发的。在 ETL 领域,您通常会汇总数据。因此,如果我想汇总 2016 年 2 月 19 日的数据,我会在格林尼治标准时间 2016 年 2 月 20 日午夜进行,即在 2016 年 2 月 19 日的所有数据可用之后。 您可以在 Jinja 和 Python 可调用上下文中以多种形式使用此日期,如此处所述。注意 ds 指的是 date_string,而不是日期开始,因为可能会让某些人感到困惑。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Airflow 未回填最新运行 的相关文章

随机推荐