气流计划未更新

时间:2020-12-30 11:34:46

标签: airflow airflow-scheduler

我创建了一个每周运行一次的 DAG。以下是我尝试过的,并且按预期工作。

from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.bash_operator import BashOperator

SCHEDULE_INTERVAL = timedelta(weeks=1, seconds=00, minutes=00, hours=00)
default_args = {
    'depends_on_past': False,
    'retries': 0,
    'retry_delay': timedelta(minutes=2),
    'wait_for_downstream': True,
    'provide_context': True,
    'start_date': datetime(2020, 12, 20, hour=00, minute=00, second=00)
}

with DAG("DAG", default_args=default_args, schedule_interval=SCHEDULE_INTERVAL, catchup=True) as dag:
    t1 = BashOperator(
        task_id='dag_schedule',
        bash_command='echo DAG',
        dag=dag)

按照计划,它在 27 日运行(即脚本中的 20 日)。由于需求发生变化,现在我将开始日期更新为 30 日(即脚本中的 23 日)而不是 27 日(我的想法是从 30 日开始计划,然后每周开始)。当我更改 DAG 的时间表时,即开始日期从 27 日更改为 30 日。 DAG 没有按照最晚的开始日期进行选择,不知道为什么?当我删除 DAG 时(因为它是测试 DAG,我删除了它,在 prod 中我无法删除它)并使用最新开始日期即 30 日创建了同名的新 D​​AG,它按计划运行。

2 个答案:

答案 0 :(得分:1)

您定义的 DAG 将在 6-Jan-2021

触发

在间隔 (See doc reference) 结束时的气流调度任务

根据您的设置:

SCHEDULE_INTERVAL = timedelta(weeks=1, seconds=00, minutes=00, hours=00)

'start_date': datetime(2020, 12 , 30, hour=00, minute=00, second=00)

这意味着第一次运行将在 6-Jan-2021 因为 30-Dec-2020 + 1 week = 6-Jan-2021 注意这次运行的 execution_date 将是 {{1 }}

答案 1 :(得分:1)

根据 Airflow DOC 的规定

当需要更改开始日期和计划间隔时,请更改 dag 的名称(又名 dag_id) - 我遵循约定:my_dag_v1、my_dag_v2、my_dag_v3、my_dag_v4 等...

因此,如果我们更改开始日期,我们需要更改 DAG 名称或删除现有 DAG,以便再次使用相同名称重新创建(与先前 DAG 相关的元数据将从元数据中删除)

参考: https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=62694614