Есть ли в airflow что-то вроде `вчера_дней` / ` завтра_дней`, но для заданий `@month`?

У меня есть работа, которая использует 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 }}';

Как я мог реализовать это?

2 ответа

Решение

Если вы используете последнюю версию Airflow и вы установили интервал своего расписания равным @monthly, то я думаю, что {{ prev_execution_date }} а также {{ next_execution_date }} это то, что вы ищете. Вы можете увидеть все макросы здесь

Ты можешь использовать {{ prev_execution_date }} так же как {{ next_execution_date }} Если вы работаете @monthyl интервал графика.

В случае, если вы этого не делаете, вы можете разработать собственный макрос с помощью системы плагинов. Эти макросы позволят вам разработать функцию для передачи в шаблон, который точно соответствует вашим потребностям независимо от schedule_interval. Вы можете использовать существующие макросы ds_add() и ds_format() в качестве руководства.

Другие вопросы по тегам