У меня есть DAG с воздушным потоком, который я хочу запускать каждые 15 минут. Эта метка всегда будет обрабатывать данные из предыдущего 15-минутного окна (от получаса ранее). Я хочу, чтобы границы обработанного времени совпадали с четверть часа.
Таким образом, в одном из моих SQL-запросов я хочу иметь шаблонное предложение WHERE, подобное
WHERE
event_timestamp >= TIMESTAMP('{{ (execution_date - macros.timedelta(minutes=30)).strftime("%Y-%m-%d %H:%M:%S") }}') AND
event_timestamp < TIMESTAMP('{{ (execution_date - macros.timedelta(minutes=15)).strftime("%Y-%m-%d %H:%M:%S") }}')
Проблема в том, что объект execution_date
точно не совпадает с каждым четверть часа. Я ожидал этого, потому что вот как я планирую свой DAG:
default_dag_args = {
'start_date': dt.datetime(2019, 4, 8),
...
}
models.DAG(
'my_dag',
schedule_interval=dt.timedelta(minutes=15),
default_args=default_dag_args) as dag:
У меня два вопроса
- Почему
execution_date
не совпадает точно с каждым квартальным часом?
- Как мне добиться желаемого поведения при написании моего SQL-запроса, который выбирает события из 15-минутного периода, который совпадает с четверть часа, и время начала которого отстает от даты выполнения на 30 минут?