Files
clickstream-data-platform/docs/architecture/dds
ddadminandClaude Fable 5 f33d75113d feat(dm): добавлены учебные задания витрин и даг самопроверки
- Зачем:
  - менти строит витрины DM сам, от DDL по правилу зерна до задачи в
    конвейере; стенду нужны ТЗ с образцом и обратная связь по каждой
    витрине (#159, резолюция #135).
- Что:
  - docs/labs/: README и пять ТЗ — events_enriched_v, top_pages_daily,
    session_overview, dq_errors_daily, utm_effectiveness; каждое ТЗ
    называет урок, состав колонок, форму по зерну и самопроверку.
  - dags/homework_check.py: ручной даг, задача на витрину, красная без
    витрины или при расхождении; проверки — шесть файлов sql/dq/ с
    инвариантами против DDS и ODS, без золотых констант; в dq_summary
    не пишет.
  - docs: dm.md называет homework_check и снимает «Остается нарезке»,
    §7 и §10 мастер-спеки согласованы с лабами, dds/session.md указывает
    на ТЗ, AGENTS.md пополнен правилом имен docs/labs/.
- Проверка:
  - make lint; make smoke 21/21, make check-clickhouse 10/10,
    make check-services 7/7.
  - на свежем стенде все пять задач homework_check красные и называют
    ТЗ; черновик каждой витрины по тексту ТЗ зеленит свою задачу,
    после сноса — снова красная; строк от самопроверки в dq_summary нет.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-27 17:44:15 -04:00
..

Слой DDS: бизнес-модель хранилища

Устройство детального слоя: сущности, которыми хранилище говорит с витринами, их связи и правила слоя. Набор собирается развилками карты #127 (этап 4) и правится по мере постройки.

Рамки заданы мастер-спекой «Боевой реализм стенда (v2)»: карта таблиц и витрины — раздел 7, сверка — раздел 4, склейка идентичностей — раздел 5. Дом выбран развилкой #130 — первой, которой понадобилось записать резолюцию в доки: записи этапа 4 живут здесь, по хранилищную сторону границы «источник | хранилище». Устройство источников остаётся их собственным наборам (заказы бэкенда) — генератор переносим и о нашем DDS не знает.

Карта модели

Целостность модели — связи и ко-локация — живёт в этом разделе; файлы сущностей держат глубину и на карту ссылаются.

  • Заказ (dds.order_v, хранение dds.order_rep / _dist) — физическая сущность: одна строка — заказ в текущем состоянии, позиции массивами в строке, наполняется заменой партиций — модель заказа.
  • Сессия (dds.session_v, хранение dds.session_rep / _dist) — расчётная сущность: одна строка — визит, нарезку по правилу визита стенд делает сам, VisitID генератора — эталон сверки; наполнение заменой дневной партиции — модель сессии.
  • Событие (dds.event_v) — контракт над ODS, а не копия: представление, переводящее событие на язык бизнес-модели, — контракт события.
  • Карта идентичностей (dds.identity_map_v, хранение dds.identity_map_rep / _dist) — кука ↔ пользователь магазина — модель карты.

Связи держатся двумя ключами моста (спека, разделы 4 и 5): purchaseID[1] события равен order_id заказа — по нему идут сверка и сборка склейки; user_id заказа связывает куки одного человека. Ко-локацию задаёт шардирование: события и карта идентичностей раскладываются одним выражением от куки, заказы — от order_id. Поэтому обогащение витрин склейкой локально, а сверка и сборка карты ходят через GLOBAL JOIN с обеими сторонами-подзапросами (исследование соединений).

Правила слоя

  • DDS обслуживает человека с дашбордом: время лежит в поясе счётчика, пересчёт — один раз при наполнении слоя (дока хранилища, «Часовые пояса»).
  • Публичный договор каждой сущности — _v; роли объектов и конвенция чтения заданы докой хранилища, «Имена объектов».
  • Служебные колонки — координаты собственной загрузки слоя; чужие ярлыки не переносятся, а спрашиваются у их слоя по ключу сущности. Вывод правила и цепочка расследования — модель заказа.
  • Наполняет слой дневной конвейер: запуск, объём прогона и замена партиций на кластере — его устройство.

Родословная

Дом набора и первая сущность собраны развилкой #130 карты #127; форма набора — ADR 0011.