气流计划未更新

dat*_*ict 3 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)
Run Code Online (Sandbox Code Playgroud)

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

de-*_*ner 8

根据 Airflow DOC

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

  • 更改计划间隔始终需要更改 dag_id,因为之前运行的 TaskInstances 将与新的计划间隔不一致
  • 更改 start_date 而不更改 Schedule_interval 是安全的,但更改为较早的 start_date 不会在新 start_date 和旧 start_date 之间的时间创建任何新的 DagRun,因此任务不会自动回填到新日期。如果您手动创建 DagRun,只要 DagRun 日期晚于任务 start_date 和 dag start_date,就会安排任务。

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

来源