我创建了一个每周运行一次的 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 日创建了同名的新 DAG,它按计划运行。>
答案 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