- Зачем: - закрыты задачи P0 и P1 из ревью архитектуры для повышения понятности стенда для студентов. - Что: - исправлен distribution key для airport_traffic в дизайн-документе. - добавлены комментарии о генерации SK и отсутствии SK в фактах. - создан документ docs/dag_execution_order.md с описанием порядка запуска DAG-ов. - объяснена логика late-arriving dimensions и batch resolver. - добавлена legacy-пометка для хелпера greenplum.py. - Проверка: - визуальная проверка добавленных комментариев и новых файлов.
2.8 KiB
Порядок запуска DAG (Cross-DAG Dependencies)
В этом стенде пайплайны разделены на несколько DAG-ов по слоям DWH (STG, ODS, DDS, DM).
Они настроены с schedule=None, так как это учебный проект.
Чтобы данные корректно прошли от источника до витрин, запускать DAG-и нужно в определённом порядке.
1. DDL-скрипты (выполняются один раз)
Для создания структуры таблиц в аналитических слоях:
- Запустите
bookings_dds_ddl— создаст таблицы для измерений и фактов в слое DDS. - Запустите
bookings_dm_ddl— создаст таблицы витрин в слое DM.
(Слои STG и ODS создаются при старте стенда через make ddl-gp или могут быть пересозданы соответствующими DDL-скриптами).
2. Ежедневная загрузка (ETL)
Для прогрузки новой порции данных (или полного перерасчёта) соблюдайте следующую цепочку:
bookings_to_gp_stage- Извлекает новые данные из демо-БД PostgreSQL и сохраняет их в
stg-схему в Greenplum. - Генерирует
stg_batch_idдля текущей загрузки.
- Извлекает новые данные из демо-БД PostgreSQL и сохраняет их в
bookings_to_gp_ods- Берёт последний согласованный
stg_batch_idиз STG-слоя. - Выполняет нормализацию и SCD1-UPSERT в слой ODS.
- Берёт последний согласованный
bookings_to_gp_dds- Читает очищенные данные из ODS.
- Обновляет измерения (SCD1, SCD2) и инкрементально догружает новые рейсы в таблицу фактов
dds.fact_flight_sales.
bookings_to_gp_dm- Читает новые факты из DDS.
- Обновляет агрегированные витрины (использует HWM-инкрементальность по
_load_tsили полный перерасчёт).
💡 Архитектурная заметка: В реальном production-окружении (Airflow) эти связи между DAG-ами обычно настраиваются автоматически через
TriggerDagRunOperator,ExternalTaskSensorили механизмы Data-Aware Scheduling (Datasets/Data Assets). В учебных целях мы оставили их ручными, чтобы вы могли проинспектировать каждый слой после его загрузки.