我有一份工作正在使用ds
变量来协调其处理的工作量,并计划每天与@daily
一起运行。
select * from events
where date = '{{ ds }}';
但是,我想将它的新版本写为@monthly
。我没有太多改变,但我需要访问下一次运行的日期戳,以便干净地移植它。
select * from events
where
date >= '{{ ds }}'
and
date < '{{ macros.ds_add(ds, 32) }}';
我可以通过让DAGrun的结束日期为{{ ds_add(ds, 32) }}
来解决问题,因为我的工作能够处理运行之间的重叠,但是我希望有一种方法可以让日期戳成为第一个下个月或上个月的第一个月。
select * from events
where
date >= '{{ ds }}'
and
date < '{{ next_month }}';
我怎么能实现这个?
答案 0 :(得分:4)
如果您正在运行最新版本的Airflow,并且您将日程安排的时间间隔设置为@monthly,那么我认为{{ prev_execution_date }}
和{{ next_execution_date }}
正是您所寻找的。您可以看到所有宏here
答案 1 :(得分:1)
如果您正在运行{{ prev_execution_date }}
计划间隔,则可以使用{{ next_execution_date }}
以及@monthyl
。
如果您没有这样做,您可能希望通过插件系统开发自定义宏。这些宏将使您能够开发一个函数,该函数可以传递到满足您的确切需求的模板,而不管schedule_interval如何。您可以使用现有的ds_add() and ds_format()宏作为指导。