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 时,它按照计划运行。
根据 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 相关的元数据将从元数据中删除)
| 归档时间: |
|
| 查看次数: |
3004 次 |
| 最近记录: |