Руководства STG/ODS/DDS/DM сверены с действующими SQL и DAG, ожидания учебных заглушек связаны с ТЗ. Самопроверка заданий отделена от проверок разработки и исторических планов. Для dim_routes закреплено обновление описательных полей только у открытых версий. SQL, DAG, DDL и настройки стенда не менялись. Проверки: make lint; make test (4 passed, 14 skipped); карта; 292 локальные ссылки; маршрут чтения и карта в Chromium. Живой ETL не запускался.
5.7 KiB
5.7 KiB
Конвенции Нейминга DWH (Единый Источник)
Статус: активный стандарт для новых реализаций в этом репозитории.
Основа: учебные материалы
de-roadmap/dwh-modeling.
Зачем этот документ
Этот справочник задает имена служебных полей. Состав колонок конкретной таблицы проверяйте по ее DDL, а требования к учебной загрузке - по ТЗ.
1. Базовые правила
- Имена колонок:
snake_case, на английском. - Бизнес-ключи источника не переименовываем без необходимости (
book_ref,ticket_no,route_no). - Булевы поля начинаются с
is_(is_outbound,is_boarded). - Денежные и количественные поля называем по смыслу (
total_amount,amount,range_km).
2. Каноничные служебные поля
| Поле | Тип (рекомендация) | Смысл | Где применять |
|---|---|---|---|
_load_id |
TEXT NOT NULL |
Идентификатор запуска или исходного STG-батча; зависит от слоя | STG, ODS, DDS и DM, кроме календаря |
_load_ts |
TIMESTAMP NOT NULL |
Метка загрузки; в транзакционных ODS сохраняется время STG | STG, ODS, DDS и DM, кроме календаря |
event_ts |
TIMESTAMP |
Опорное время источника или получения снимка | Все таблицы STG и транзакционные ODS |
created_at |
TIMESTAMP NOT NULL |
Когда строка создана в таблице слоя | DDS/DM, где есть lifecycle строки |
updated_at |
TIMESTAMP NOT NULL |
Когда строка обновлена в таблице слоя | DDS/DM, где есть UPDATE |
valid_from |
DATE NOT NULL (базовый трек) |
Начало действия версии SCD2 | DDS SCD2 |
valid_to |
DATE |
Конец действия версии SCD2 (NULL = current) |
DDS SCD2 |
hashdiff |
TEXT NOT NULL |
Хэш атрибутов версии для детекта изменений | DDS SCD2 |
3. Ключи в DDS
- Бизнес-ключ измерения: суффикс
_bk(customer_bk,airport_bk). - Суррогатный ключ измерения: суффикс
_sk(customer_sk,airport_sk). - В существующих таблицах есть бизнес-ключи без
_bk:passenger_idу пассажиров,fare_conditionsу тарифов,date_actualу календаря. Используйте имена из DDL и ТЗ; переименовывать их в задании не нужно.
4. Правило времени (важно для обучения)
- В STG
event_tsзадает опору инкремента:book_dateу бронирований, билетов, сегментов и посадочных талонов;scheduled_departureу рейсов. Например, у талона это дата бронирования, а неboarding_time. - У снимков
airports,airplanes,routes,seatsв STGevent_ts = now(): точного времени изменения записи в источнике здесь нет. _load_tsотносится к загрузке. Какой именно слой ее поставил, указано ниже. Правила отбора строк описаны в руководствах STG и ODS.
5. Применение по слоям
STG
- Все таблицы содержат
_load_id = run_idзапуска STG,_load_ts = now()иevent_tsпо правилам выше.
ODS
- Снимки
airports,airplanes,routes,seats:_load_idвыбранного STG-батча,_load_ts = now(), безevent_ts. Загрузка заменяет снимок целиком. - Транзакционные таблицы:
_load_id,_load_tsиevent_tsпереносятся из STG. Сохраненная_load_tsслужит границей инкремента дляUPDATE + INSERT.
DDS и DM
_load_idизмененной или вставленной строки относится к текущему запуску своего слоя,_load_tsфиксирует время записи.- Календарь статический: у
dim_calendarнет меток загрузки. created_atиupdated_atиспользуем там, где они предусмотрены DDL. Например, у факта и полностью пересчитываемойroute_performanceих нет.- Для SCD2 используем:
valid_from,valid_to,hashdiff,created_at,updated_at.
- Интервалы считаем как
[valid_from, valid_to), current-версия:valid_to IS NULL.
6. Что проверяем в ревью
- Нет новых техполей-синнонимов вроде
loaded_at,ingested_at,batch_key, если уже есть канон. - Нет смешивания
event_tsи_load_tsв одном смысле. - В SCD2 не используются альтернативы
dw_start_date/dw_end_date, если в проекте принятvalid_from/valid_to.