Airflow每周调度任务启动日期异常问题咨询
Airflow DAG未自动触发补跑的原因与解决方法
原因分析
Airflow的调度逻辑基于数据区间(Data Interval),而非直接按start_date与当前日期的间隔判断补跑:
@weekly的默认数据区间是自然周对齐(通常为周一00:00至下周一00:00),你的start_date=2023-06-15(周四)会被Airflow自动调整到最近的周起始点2023-06-18(周一),形成第一个数据区间2023-06-18 ~ 2023-06-25。- Airflow仅在数据区间结束后才会触发对应运行,当前日期2023-06-23尚未到达区间结束时间2023-06-25,因此不会自动触发补跑。
解决方法
方法1:手动触发补跑
- 通过UI操作:进入DAG详情页,点击「Trigger DAG」→ 选择「Backfill」模式,指定时间范围
2023-06-15至2023-06-23执行补跑。 - 通过命令行执行:
airflow dags backfill -s 2023-06-15 -e 2023-06-23 my_dag
方法2:使用非对齐的周调度(不推荐用于需自然周对齐的场景)
将schedule_interval="@weekly"替换为schedule_interval=timedelta(days=7),让周期从start_date开始连续计算7天:
from datetime import datetime, timedelta from airflow import DAG from airflow.operators.dummy import DummyOperator dag_1 = DAG( dag_id="my_dag", start_date=datetime(2023, 6, 15), schedule_interval=timedelta(days=7) ) dummy_1 = DummyOperator( task_id="dummy_1", dag=dag_1 )
此时第一个数据区间为2023-06-15 ~ 2023-06-22,当前日期2023-06-23已过区间结束时间,激活DAG时会自动触发补跑。
方法3:调整start_date到自然周起始点
将start_date改为自然周的第一天(如2023-06-12,周一),这样第一个数据区间2023-06-12 ~ 2023-06-19已结束,激活DAG时会自动触发该区间的运行,同时下一次运行将在2023-06-25触发:
dag_1 = DAG( dag_id="my_dag", start_date=datetime(2023, 6, 12), schedule_interval="@weekly" )
内容的提问来源于stack exchange,提问作者user13
相关产品推荐
相关产品推荐

