ddadmin
|
a8cce6cd6b
|
refactor(dm): исправление архитектуры витрины sales_report
- Зачем:
- исходная реализация содержала критические ошибки MPP (Load/Processing Skew) и Full Scan.
- требуется демонстрация студентам эталонного инкрементального UPSERT.
- Что:
- изменен ключ дистрибуции с flight_date на (departure_airport_sk, arrival_airport_sk).
- внедрен каноничный UPSERT через TEMP TABLE (агрегация выполняется один раз).
- добавлен инкрементальный фильтр по {{ ds }} для предотвращения Full Scan dds.fact_flight_sales.
- проверки DQ переведены в инкрементальный режим (валидация только текущего батча).
- Проверка:
- airflow dags test bookings_to_gp_dm 2026-02-28.
|
2026-02-28 23:56:31 +03:00 |
|
ddadmin
|
7d18b3fe5c
|
feat(dm): добавлена эталонная витрина dm.sales_report
- Зачем:
- требуется эталонная витрина для обучения паттернам DM-слоя
- демонстрация UPSERT-логики с IS DISTINCT FROM для идемпотентности
- Что:
- DDL: heap-таблица dm.sales_report с 18 полями, DISTRIBUTED BY (flight_date)
- Load: UPSERT (UPDATE + INSERT) с JOIN dim_calendar, dim_airports (x2), dim_tariffs, fact_flight_sales
- DQ: PL/pgSQL DO $$ с проверками непустоты, уникальности, tickets_sold >= passengers_boarded, boarding_rate BETWEEN 0 AND 1
- DAGs: bookings_dm_ddl (DDL), bookings_to_gp_dm (ETL + DQ с параллельными ветками)
- Tests: smoke-тесты для обоих DAG
- sql/ddl_gp.sql: добавлен \i dm/sales_report_ddl.sql
- Проверка:
- make fmt && make lint — passed
- make test — 15 passed, 11 skipped
- make ddl-gp — DDL applied successfully
- airflow dags test bookings_to_gp_dm 2026-02-28T13:00:00 — 4 tasks SUCCESS
- 9243 rows loaded, _load_id подставлен корректно (Jinja2 templating works)
- DQ checks passed
|
2026-02-28 22:13:11 +03:00 |
|