Airflow学习之路三 airflow最佳实践

本文介绍了Airflow中不推荐使用动态start_date的原因,强调了start_date在DAG运行和调度中的作用。建议使用default_args设置全局start_date,并避免使用datetime.now(),以防任务触发混乱。此外,不应依赖schedule_interval的四舍五入,而应使用cron表达式。对于depends_on_past=True的任务,需谨慎处理start_date,尤其是在回填操作中。
摘要由CSDN通过智能技术生成

在airflow官方文档1中不推荐使用动态的start_date

start_date是前DagRun部分遗留,但仍然运用在许多方面。当创建了一个新的DAG时, 对于你的任务可能需要使用default_args来设置一个全局的start_date。建立的第一个DagRun将会基于所有任务中最小的(start_date)。从那时起,调度程序将会根据你的schedule_interval 来建立新的DagRun,并且在满足所设立的依赖时运行相应的任务实例。将新任务引入DAG时,需要特别注意start_date,有可能需要重新激活未启动的DagRuns才能使新任务正常启动。

我们建议不要将动态值用于start_date,尤其是datetime.now()函数,因为该函数可能会让系统造成混乱。一旦该周期结束,任务就会被触发,并且从理论上来讲,随着now()函数的增长,@hourly DAG永远不会到此刻的一小时之后。
以前,我们还建议针对schedule_interval使用四舍五入的start_date。这意味着一个@hourly在零分零秒,一个@daily工作在午夜,一个@monthly工作在每月的第一天。而这不再是必要的了。Airflow通过使用start_date作为查询时刻,将自动对齐start_dateschedule_interval

你可以使用任意一个传感器或者TimeDeltaSensor来延迟执行计划间隔之内的任务。尽管schedule_interval确实允许指定datetime.timedelta对象,但建议使用宏或者cron表达式来代替,因为它能强制执行舍入时间表的想法。

当使用depends_on_past=True需要特别注意start_date,因为过去的依赖关系不仅仅根据为任务指定的start_date的具体时间表来执行。在引入新的depends_on_past=True时,及时地观察DagRun活动状态也很重要,除非你计划为新的任务进行回填。

还需要重点观察的是任务的start_date,在回填CLI命令中,任务的start_date会被回填的start_date命令覆盖。这允许有depends_on_past=True且开始执行的任务进行回填。如果不是这种情况,回填将不会开始。

个人理解:
DAG()中:
参数schedule_interval最好不要使用timedelta()函数
参数(字典)default_args中最好加入"depends_on_past": True

示例

default_args = {
			"owner": "air",
			"start_date": days_ago(0),
			"description": "测试",
			"depends_on_past": True,
}
dag = DAG(dag_id="dim_dw",
          default_args=args,
          schedule_interval="*/60 * * * *",
          tags=["dim_dw_trans"]
          )

  1. What’s the deal with start_date ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值