docs(dds): добавлены комментарии и исправлены ошибки в DWH
- Зачем: - закрыты задачи P0 и P1 из ревью архитектуры для повышения понятности стенда для студентов. - Что: - исправлен distribution key для airport_traffic в дизайн-документе. - добавлены комментарии о генерации SK и отсутствии SK в фактах. - создан документ docs/dag_execution_order.md с описанием порядка запуска DAG-ов. - объяснена логика late-arriving dimensions и batch resolver. - добавлена legacy-пометка для хелпера greenplum.py. - Проверка: - визуальная проверка добавленных комментариев и новых файлов.
This commit is contained in:
@@ -22,6 +22,9 @@ WHERE d.airport_bk = s.airport_code
|
||||
|
||||
-- Statement 2: INSERT новых записей (MAX(sk) + ROW_NUMBER()).
|
||||
-- Учебный комментарий: Генерация SK через MAX() + ROW_NUMBER()
|
||||
-- Почему не SERIAL/IDENTITY? В MPP-базах данных (как Greenplum) sequence
|
||||
-- работают через мастер-узел и могут стать узким местом при массовой вставке.
|
||||
-- Паттерн MAX() + ROW_NUMBER() генерирует ключи распределённо на сегментах.
|
||||
-- Этот подход работает безопасно только потому, что Airflow запускает
|
||||
-- джобы загрузки для одной таблицы строго последовательно (concurrency=1).
|
||||
-- При параллельной загрузке возникнет состояние гонки (race condition) и возможны дубли SK.
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
|
||||
CREATE SCHEMA IF NOT EXISTS dds;
|
||||
|
||||
-- Учебный комментарий: Почему у факта нет своего суррогатного ключа (fact_sk)?
|
||||
-- В классическом DWH (Кимбалл) таблица фактов идентифицируется набором её
|
||||
-- измерений или дегенеративных ключей (в нашем случае: ticket_no + flight_id).
|
||||
-- Добавление отдельного ID только тратит место и не несёт аналитической ценности.
|
||||
CREATE TABLE IF NOT EXISTS dds.fact_flight_sales (
|
||||
calendar_sk INTEGER,
|
||||
departure_airport_sk INTEGER,
|
||||
|
||||
@@ -45,6 +45,11 @@ WITH fact_src AS (
|
||||
ON bkg.book_ref = tkt.book_ref
|
||||
JOIN ods.flights AS flt
|
||||
ON flt.flight_id = seg.flight_id
|
||||
-- Учебный комментарий: Late-arriving dimensions (Опаздывающие измерения)
|
||||
-- Мы используем LEFT JOIN, так как факт (рейс/билет) может прийти раньше,
|
||||
-- чем справочник (пассажир/маршрут) обновится в DDS.
|
||||
-- В результате SK будет NULL. В более сложных пайплайнах такие факты
|
||||
-- либо обогащаются dummy-значениями (-1, "Неизвестно"), либо откладываются.
|
||||
LEFT JOIN dds.dim_routes AS rte
|
||||
ON rte.route_bk = flt.route_no
|
||||
AND flt.scheduled_departure::DATE >= rte.valid_from
|
||||
|
||||
Reference in New Issue
Block a user