Airflow 执行日期令人困惑

Airflow 执行日期令人困惑,airflow,scheduler,Airflow,Scheduler,我正在研究Airflow文档,以便更好地理解它的调度机制。我遇到了下面的例子 文件中规定,当调度程序在2016-01-02上午6点选取DAG时,将创建一个DAG运行,执行日期为2016-01-01,下一个DAG运行将在2016-01-03上午午夜后创建,执行日期为2016-01-02 计划间隔以小时为单位提供,执行日期指的是DAG在结束时运行的时间段的开始,那么为什么它不是2016-01-02早上6点调度器选择DAG的前一个小时呢 """ Code that goe

我正在研究Airflow文档,以便更好地理解它的调度机制。我遇到了下面的例子

文件中规定,当调度程序在2016-01-02上午6点选取DAG时,将创建一个DAG运行,执行日期为2016-01-01,下一个DAG运行将在2016-01-03上午午夜后创建,执行日期为2016-01-02

计划间隔以小时为单位提供,执行日期指的是DAG在结束时运行的时间段的开始,那么为什么它不是2016-01-02早上6点调度器选择DAG的前一个小时呢

"""
Code that goes along with the Airflow tutorial located at:
https://github.com/airbnb/airflow/blob/master/airflow/example_dags/tutorial.py
"""
from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta


default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime(2015, 12, 1),
    'email': ['airflow@example.com'],
    'email_on_failure': False,
    'email_on_retry': False,
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
    'schedule_interval': '@hourly',
}

dag = DAG('tutorial', catchup=False, default_args=default_args)
我创建了一个基本的DAG,其运行信息如下图所示。我给出的时间间隔为50****。当DAG时钟大约在10:58时,它已经过了10:50。DAG立即被触发,因为它已经过了10:50,执行日期定为2021-04-25 09:50。所以它的执行日期也是在它被触发的那一天,因为它被安排在每小时50分钟

每小时的空气流量对应于0****。它的时间表也类似。每小时在0分钟触发,但在文档中,其执行日期为2016-01-01。我想它一定是2016-01-02下午5点,因为它每小时触发一次,当它在下午6点触发时,它的间隔开始日期是2016-01-02下午5点


气流在间隔结束时运行DAG。因此,当您以24小时为间隔工作时,
2016-01-01
的运行将从
2016-01-02
开始。 这与数据管道创作是一致的。今天您正在处理昨天的数据

您可以在以下答案中了解更多信息:


谢谢,但计划时间间隔设置为每小时一次。这就是让我困惑的地方。我知道DAGRuns实际上是在时间间隔结束时运行的,所以我认为如果气流选择dag 2016-01-02上午6点,它必须运行dag,并将执行日期作为时间间隔的开始日期指定为2016-01-02上午5点,因为计划时间间隔设置为每小时。@tkarahan这并不重要,逻辑是一样的。我想我可能没有完全理解你的问题。我提供的另一个stackoverflow问题的链接给出了小时dag的示例,是否仍然不够清楚?。您能否提供界面截图,显示DAG运行的详细信息以及与您的期望不符的内容?我检查了链接,我了解到如果您将DAG计划为0 8***,它将在第二天08:00触发,因为这是间隔的结束。在我的例子中,@hourly对应于0****,所以它不是每天安排一次,而是每小时安排一次。因此,间隔的开始时间必须是触发时间的一小时前。如果调度程序在2016年1月2日下午6点拾取并触发它,则其执行日期必须为2016年1月2日下午5点,因为它是按小时计划的。我还测试了这个逻辑,它似乎与屏幕截图兼容。我想知道doc是否包含虚假信息。@tkarahan当您提供过去的
start\u日期+
catchup=false
时,您是否对第一次运行感到困惑?看见