Files
airflow-greenplum/docs/design/naming_conventions.md
T
ddadmin 35144e49f6 docs: согласованы руководства загрузок и учебный маршрут
Руководства STG/ODS/DDS/DM сверены с действующими SQL и DAG,
ожидания учебных заглушек связаны с ТЗ. Самопроверка заданий
отделена от проверок разработки и исторических планов.

Для dim_routes закреплено обновление описательных полей только
у открытых версий. SQL, DAG, DDL и настройки стенда не менялись.

Проверки: make lint; make test (4 passed, 14 skipped); карта;
292 локальные ссылки; маршрут чтения и карта в Chromium.
Живой ETL не запускался.
2026-09-20 15:53:39 -04:00

82 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Конвенции Нейминга 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`.