出于某种原因,Airflow 似乎不会触发具有每周计划间隔的 dag 的最新运行。
当前的日期:
$ date
$ Tue Aug 9 17:09:55 UTC 2016
Run Code Online (Sandbox Code Playgroud)
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
)
Run Code Online (Sandbox Code Playgroud)
运行调度程序
$ airflow scheduler -d superdag
Run Code Online (Sandbox Code Playgroud)
您预计总共有四次 DAG 运行,因为调度程序应该回填 7/18、7/25、8/1 和 8/8。但是,未安排最后一次运行。
编辑 1:
我理解 Vineet 虽然这似乎并不能解释我的问题。
在我上面的示例中,DAG 的开始日期是 7 月 18 日。
每个 DAG Run 处理上周的数据。
今天是 8 月 9 日,我预计第四次 DAG 运行将在 8 月 8 日的执行日期执行,该日期处理上周(8 月 1 日至 8 月 8 日)的数据,但事实并非如此。
气流总是安排在前一时期。因此,如果您有一个计划在 8 月 9 日每天运行的 dag,它将计划在 8 月 8 日执行 execution_date 运行。类似地,如果调度间隔是每周一次,那么在 8 月 9 日,它将调度回 1 周,即 8 月 2 日,尽管这会在 8 月 9 日本身运行。这只是气流簿记。您可以在气流维基(https://cwiki.apache.org/confluence/display/AIRFLOW/Common+Pitfalls)中找到它:
了解执行日期 Airflow 是作为 ETL 需求的解决方案开发的。在 ETL 世界中,您通常会汇总数据。所以,如果我想总结 2016-02-19 的数据,我会在格林威治标准时间 2016-02-20 午夜进行,这将是在 2016-02-19 的所有数据可用之后。您可以在 Jinja 和 Python 可调用的上下文中以多种形式获取此日期,如此处所述。注意 ds 指的是 date_string,而不是日期开始,因为这可能会让某些人感到困惑。
| 归档时间: |
|
| 查看次数: |
2431 次 |
| 最近记录: |