airflow 是否有类似 `yesterday_ds` / `tomorrow_ds` 的东西,但用于 `@monthly` 作业?

Does airflow have something like `yesterday_ds` / `tomorrow_ds` but for `@monthly` jobs?

我有一份工作使用 ds 变量来协调它处理的工作量,并且计划每天 运行 @daily

select * from events
where date = '{{ ds }}';

不过,我想写一个新版本@monthly。我不需要做太多改变,但我需要访问下一个 运行 的日期戳,以便干净地移植它。

select * from events
where
date >= '{{ ds }}'
and
date < '{{ macros.ds_add(ds, 32) }}';

我可以通过将 DAG运行 的结束日期设为 {{ ds_add(ds, 32) }} 来度过难关,因为我的工作能够处理 运行 之间的重叠,但我当时希望有一种方法可以使日期戳成为下个月的第一天或上个月的第一天。

select * from events
where
date >= '{{ ds }}'
and
date < '{{ next_month }}';

我该如何实现?

如果您是 运行 最新版本的 Airflow,并且您将日程安排的时间间隔设置为 @monthly 那么我认为 {{ prev_execution_date }}{{ next_execution_date }} 就是您要找的为了。可以看到所有的宏here

您可以使用 {{ prev_execution_date }} 以及 {{ next_execution_date }} 如果您是 运行 一个 @monthyl 计划间隔。

如果您不这样做,您可能希望通过插件系统开发自定义宏。这些宏将使您能够开发一个函数以传递到满足您确切需求的模板中,而不管 schedule_interval。您可以使用现有的 ds_add() and ds_format() 宏作为指导。