diff --git a/docs/architecture/dm.md b/docs/architecture/dm.md index 5338702..c56cb26 100644 --- a/docs/architecture/dm.md +++ b/docs/architecture/dm.md @@ -10,8 +10,8 @@ Витрина, меняющая зерно источника — дневной агрегат, сверка по заказам, — материализуется: `dm.<имя>_rep` / `_dist` и публичное `dm.<имя>_v` с явным списком колонок, по общим [конвенциям хранилища](storage.md). Наполняет её -`dm_transform` заменой дневных партиций дышащего окна K — той же механикой, -что у сущностей DDS ([конвейер](etl.md)). Витрина, сохраняющая зерно +`dm_transform` заменой дневных партиций — той же механикой, что у сущностей +DDS ([конвейер](etl.md)); объём пересборки — ниже. Витрина, сохраняющая зерно источника — переименование, обогащение строки, — остаётся обычным представлением: копию событий ради других имён колонок не держит ни один боевой склад. @@ -33,18 +33,38 @@ - `purchase_vs_orders` — сверка A+C с классами расхождений; зерно — заказ, шардирование сохраняет ко-локацию заказов по `cityHash64(order_id)`; - `daily_traffic` — пара «посетители» / «известные пользователи», локальное - обогащение картой идентичностей; + обогащение [картой идентичностей](dds/identity.md); - `dq_summary` — сводка проверок качества (ниже). Остальные витрины спеки — учебные задания: менти строит их сам по ТЗ с образцом. Разминка — представление `events_enriched_v` (зерно события), затем агрегаты `top_pages_daily`, `session_overview` и `dq_errors_daily`, последней — самая содержательная `utm_effectiveness` с уроком `declared_*`. +Построенная витрина встаёт в конвейер руками менти: финальный пункт +каждого ТЗ — добавить задачу своей витрины в `dm_transform`. До этого +конвейер о ней не знает и остаётся зелёным, после — витрина пересобирается +наравне со стендовыми. Дашборд этапа 8 стоит только на витринах стенда: приёмка этапа не зависит от выполненных домашек. Расширение дашборда визуализациями по своим витринам — отдельная домашка после этапа 8. +## Объём пересборки + +Все материализованные витрины пересобираются одним окном — дышащим окном K +от позиции мира, тем же, что у заказов. Витринам от заказов окна хватает по +построению: день за окном закрыт, его классы и суммы не меняются. Витринам +от событий и сессий окно даже избыточно — их дни замерзают сразу. + +Одно следствие названо явно. `daily_traffic` обогащается картой +идентичностей, а карта пересчитывается целиком, и склейка ретроспективна: +покупка сегодня делает куку «известной» во всех прошлых днях карты. Дни за +окном K в витрину эту новость уже не получат — они хранят число известных +на момент закрытия окна. Это решение, а не недосмотр: живое окно показывает +текущую склейку, замороженные дни — какой она была тогда, и расхождение +между витриной и картой само по себе урок ретроспективности (историю +склейки стенд сознательно не хранит — issue #145). + ## `dm.dq_summary` Зерно — «день данных × проверка»: строка отвечает, каково качество дня @@ -78,14 +98,15 @@ Airflow. Партиция — день данных; прогон звена DQ константы не прибиваются. В `dq_summary` даг не пишет: он инструмент лабы, а не история качества конвейера. -Приём проверен на greenplum-стенде предшественника: валидационный даг с +Приём проверен на соседнем учебном стенде Airflow + Greenplum: валидационный даг с группами проверок по слоям давал менти обратную связь по каждому шагу домашки, не трогая рабочий конвейер. ## Остаётся нарезке - Имена задач `dm_transform`, звена DQ и дага самопроверки. -- Ключи шардирования материализованных витрин — вместе с их DDL; правило +- Ключи шардирования остальных материализованных витрин — вместе с их + DDL; правило партиции-донора — в [доке хранилища](storage.md). - Тексты учебных заданий и точный список проверок обоих контуров. - Механика сверки A+C в SQL — рамка в спеке, разделы 4 и 7. @@ -112,7 +133,8 @@ Airflow. Партиция — день данных; прогон звена DQ ## Связанные решения -- Мастер-спека, разделы 4 и 7, — состав колонок витрин и классы сверки. +- [Мастер-спека](../specs/2026-07-30-stand-v2-realism.md), разделы 4 и 7, — + состав колонок витрин и классы сверки. - [Дневной конвейер](etl.md) — запуск `dm_transform`, объём прогона, замена партиций на кластере. - [Дока хранилища](storage.md) — имена объектов, граница доступа через