Files
airflow-greenplum/docs/design/naming_conventions.md
ddadmin 6655326caa docs(all): реструктурирована документация — docs/internal/ заменён на design/, reference/, archive/, plans/
- Зачем:
  - docs/internal/ превратился в свалку: дизайн-документы, ревью, планы и справочники лежали вперемешку.
  - архивные планы были неотличимы от живых документов.
- Что:
  - docs/internal/ удалён; файлы распределены по docs/design/, docs/reference/, docs/archive/, docs/plans/, docs/assignment/.
  - educational-tasks.md убран из корня в архив (устарел).
  - обновлены все перекрёстные ссылки в AGENTS.md, TODO.md, README.md, docs/README.md и внутри design/reference/.
  - актуализированы architecture_review.md (статус DM-слоя), db_schema.md (DM-слой), TESTING.md, dag_execution_order.md, pxf_bookings.md.
  - добавлены заглушки docs/assignment/README.md и docs/plans/README.md.
- Проверка:
  - make test && make lint
  - rg 'docs/internal' --glob '!docs/archive/*' — должно быть пусто.
2026-03-10 23:02:41 +03:00

4.4 KiB

Конвенции Нейминга DWH (Единый Источник)

Статус: активный стандарт для новых реализаций в этом репозитории.

Основа: учебные материалы de-roadmap/dwh-modeling.

Зачем этот документ

Чтобы имена полей не «плыли» между слоями, DAG и SQL-скриптами:

  • студенты видят один и тот же словарь во всех задачах;
  • новые реализации (ODS/DDS/DM) не расходятся с тем, как уже учили на dwh-modeling;
  • ревью становится проще: сразу видно, где отклонение от стандарта.

1. Базовые правила

  • Имена колонок: snake_case, на английском.
  • Бизнес-ключи источника не переименовываем без необходимости (book_ref, ticket_no, route_no).
  • Булевы поля начинаются с is_ (is_outbound, is_boarded).
  • Денежные/количественные поля называем явно (total_amount, segment_amount, range_km).

2. Каноничные служебные поля

Поле Тип (рекомендация) Смысл Где применять
_load_id TEXT NOT NULL Идентификатор загрузки/батча STG/ODS (новые объекты), при необходимости DDS
_load_ts TIMESTAMP NOT NULL Когда запись попала в слой STG/ODS (новые объекты)
event_ts TIMESTAMP Когда событие произошло в источнике (effective time) ODS/DDS при событийной природе данных
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).

4. Правило времени (важно для обучения)

  • event_ts (effective time) и _load_ts (load time) — разные сущности, не смешиваем.
  • Если event_ts отсутствует в источнике, используем _load_ts как fallback и явно документируем это в SQL/доке.
  • Для snapshot-справочников (airports, airplanes, routes, seats) в STG нет бизнес-события с точным временем: event_ts заполняется через now() при загрузке. Это намеренно и задокументировано в каждом load-скрипте.

5. Применение по слоям

STG

  • Используем канон _load_id, _load_ts, event_ts для всех таблиц.

ODS

  • Используем канон _load_id, _load_ts, event_ts.
  • Базовый эталон ODS в этом стенде: SCD Type 1 (current state + UPSERT).

DDS

  • Для 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.