Как правильно настроить Triggers в Apache Airflow: TriggerDagRunOperator,logical_date, reset_dag_run
Корсаков о Data
0:00 / 0:00
Как правильно настроить Triggers в Apache Airflow: TriggerDagRunOperator,logical_date, reset_dag_run
473 просмотра · 9 месяцев назад
Корсаков о Data
2,52 тыс. подписчиков
473 просмотра · 9 месяцев назад
🔥 Хочешь, чтобы витрины в DWH запускались строго после ODS, без лишних перезапусков и хаоса в зависимостях DAG’ов? В этом видео разберём, как правильно настроить Triggers в Apache Airflow: TriggerDagRunOperator, работу с logical_date, reset_dag_run и skip_when_already_exists, чтобы цепочки DAG’ов были идемпотентны, предсказуемы и не превращались в снежный ком.
Ссылки:
Менторство/консультации по Data Engineering — https://korsak0v.notion.site/Data-Eng...
TG-канал — https://t.me/DataLikeQWERTY
Instagram — / i__korsakov
Habr — https://habr.com/ru/users/k0rsakov/pu...
🔍 Что в видео:
🧠 Что такое Triggers в Airflow и чем они отличаются от Sensors в реальных DWH-пайплайнах
🧱 Базовый пайплайн: ods_dag_users_to_dwh_pg → dm_dag_without_sensors
⚙️ Первый шаг: DAG витрины без сенсоров и без триггеров — чем это плохо и где теряются данные
🚀 Добавляем триггер: ods_dag_users_to_dwh_pg_with_triggers и таска trigger_dag_dm_dag_without_sensors
📆 Работа с датами: logical_date, execution_date, Date of start — как триггер влияет на DAGRun зависимого DAG
♻️ Идемпотентность: почему у dm_dag_without_sensors стоит schedule_interval=None и как добиться «чистых» перезапусков
🧨 reset_dag_run и skip_when_already_exists:
• как безопасно перезапускать DAGRuns за прошлые даты
• как не настрелять дубликатов и не заддосить витрины перезапусками
📊 Таблицы dag_run и xcom:
• как триггеры записывают информацию о запусках
• как по таблицам понять, что DAG уже отрабатывал за нужную дату
🧬 Цепочки витрин:
• another_dm_dag_without_sensors и another_another_dm_dag_without_sensors
• как выглядит зависимость DAG → DAG → DAG через триггеры
• как работает wait_for_completion и почему он может подвесить слот scheduler’а
🕒 Poking без mode: почему триггеры с wait_for_completion всегда занимают слот, в отличие от сенсоров в режиме reschedule
💥 Что пойдёт не так, если:
• сменить dag_id зависимого DAG
• удалить/переименовать витрину, но оставить триггеры в «основном» DAG
• триггериться от DAG, который сам зависит от этого же основного DAG (циклическая зависимость)
🧵 Практические рекомендации: когда Triggers — ок, а когда лучше оставить Sensors и не трогать стабильный DAG
🗂️ GitHub репозиторий с кодом:
https://github.com/k0rsakov/pet_proje...
✉️ Вопросы, обучение, консультации — пиши в личку:
https://korsak0v.notion.site/Data-Eng...
💡 В конце видео — разбор, почему я всё-таки за подход с Sensors в проде, а триггеры использую аккуратно: разберём типичные анти‑паттерны, проблемы с несколькими источниками (несколько ODS на одну витрину) и кейсы, когда перезапуск «основного» DAG внезапно триггерит всё DWH.
Таймкоды:
00:00 – Начало
00:17 – Дисклеймер перед началом
01:02 – Разбор инфраструктуры проекта
01:47 – Рассматриваем наше DWH
02:05 – Первый DAG для наполнения DWH
03:18 – Рассматриваем первую витрину для DWH
05:38 – Разбор DAG с триггером
08:55 – Разбор работы триггером под капотом Airflow
10:00 – Как правильно работать с schedule в Airflow
10:48 – Перезапуск DAG с триггерами и разбор настройки идемпотентности
13:47 – Разбор работы execution_date под капотом Airflow
15:48 – Рассматриваем зависимостей DAG с триггерами
16:30 – Добавляем новый триггер в основной DAG
18:45 – Новый триггер и разбор атрибута wait_for_completion
21:27 – Смена имени DAG, который мы триггерим
24:20 – Рекомендации
#apacheairflow #airflow #triggers #triggerdagrunoperator #logicaldate #dataengineering #etl #elt #dwh #python #xcom #dagrun #dataengineer #tutorial