如何解决AIRFLOW DAG调度运行存在一天延迟的问题
Airflow调度日期错位问题解决方案
你遇到的是Airflow调度的默认逻辑导致的问题:Airflow的调度触发时机是调度周期结束后才执行对应周期的任务,你设置的start_date为2021-09-16,调度间隔为每天8点,第一个完整调度周期的结束时间是2021-09-17 08:00,此时触发的DAG Run的execution_date为2021-09-16,所以运行的是16日的任务。
以下是三种可直接落地的解决方案:
方案1:修改任务取数的模板参数(改动最小)
不需要修改DAG的基础配置,只需要调整任务中取数依赖的日期参数即可:
- 如果你之前用模板变量
{{ ds }}(对应execution_date的日期)作为取数日期,直接替换为{{ next_ds }}即可,该变量对应当前调度触发当日的日期 - 如果你是在Python代码中调用
execution_date属性取数,替换为next_execution_date属性即可
方案2:直接取任务运行时的当前日期
如果你的业务不需要严格依赖Airflow的execution_date回溯逻辑,直接在业务代码中取运行当日的实际日期即可,Python示例代码如下:
from datetime import datetime current_date = datetime.now().strftime("%Y-%m-%d")
使用该方案需要注意所有Airflow节点的时区配置和业务所需时区保持一致,避免日期计算错误。
方案3:调整DAG启动配置
如果你不想修改业务代码,也可以调整DAG的基础配置适配需求:
- 将
start_date设置为datetime(2021, 9, 15)(比原配置早1天) - 新增配置
catchup = False,避免触发不需要的历史回溯任务 - 调度间隔保持
0 8 * * *不变
调整后2021-09-17 08:00触发的DAG Run对应的取数日期就会匹配17日的业务数据。
内容的提问来源于stack exchange,提问作者Shanmukh S
相关产品推荐
相关产品推荐

