Руководства STG/ODS/DDS/DM сверены с действующими SQL и DAG, ожидания учебных заглушек связаны с ТЗ. Самопроверка заданий отделена от проверок разработки и исторических планов. Для dim_routes закреплено обновление описательных полей только у открытых версий. SQL, DAG, DDL и настройки стенда не менялись. Проверки: make lint; make test (4 passed, 14 skipped); карта; 292 локальные ссылки; маршрут чтения и карта в Chromium. Живой ETL не запускался.
82 lines
5.7 KiB
Markdown
82 lines
5.7 KiB
Markdown
# Конвенции Нейминга DWH (Единый Источник)
|
||
|
||
> Статус: активный стандарт для новых реализаций в этом репозитории.
|
||
>
|
||
> Основа: учебные материалы `de-roadmap/dwh-modeling`.
|
||
|
||
## Зачем этот документ
|
||
|
||
Этот справочник задает имена служебных полей. Состав колонок конкретной
|
||
таблицы проверяйте по ее DDL, а требования к учебной загрузке - по
|
||
[ТЗ](../assignment/analyst_spec.md).
|
||
|
||
## 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` в STG
|
||
`event_ts = now()`: точного времени изменения записи в источнике здесь нет.
|
||
- `_load_ts` относится к загрузке. Какой именно слой ее поставил, указано ниже.
|
||
Правила отбора строк описаны в руководствах [STG](../bookings_to_gp_stage.md)
|
||
и [ODS](../bookings_to_gp_ods.md).
|
||
|
||
## 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`.
|