docs(dm): ритм пересборки витрин выведен из подвижности источника
- Зачем:
- обсуждение горячего ревью показало: «окно K для всех» — ритм заказов,
натянутый на слой, а замерзание daily_traffic обесценивало витрину.
- Что:
- раздел «Объём пересборки» заменён «Ритмом пересборки»: три ритма —
хвост / окно K / целиком; daily_traffic наследует у карты полный
пересчёт в ReplacingMergeTree, дневные партиции ей не положены.
- в отклонённые добавлены замерзание за окном K и инкремент по
first_matched_at; инкремент стал идеей лабы повышенной сложности #149.
- Проверка:
- make config-test.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
99496971e2
commit
92d834761c
1 file changed
+28
-15
+28
-15
@@ -10,8 +10,7 @@
|
||||
Витрина, меняющая зерно источника — дневной агрегат, сверка по заказам, —
|
||||
материализуется: `dm.<имя>_rep` / `_dist` и публичное `dm.<имя>_v` с явным
|
||||
списком колонок, по общим [конвенциям хранилища](storage.md). Наполняет её
|
||||
`dm_transform` заменой дневных партиций — той же механикой, что у сущностей
|
||||
DDS ([конвейер](etl.md)); объём пересборки — ниже. Витрина, сохраняющая зерно
|
||||
`dm_transform`; ритм и механика пересборки — ниже. Витрина, сохраняющая зерно
|
||||
источника — переименование, обогащение строки, — остаётся обычным
|
||||
представлением: копию событий ради других имён колонок не держит ни один
|
||||
боевой склад.
|
||||
@@ -49,21 +48,27 @@ DDS ([конвейер](etl.md)); объём пересборки — ниже.
|
||||
от выполненных домашек. Расширение дашборда визуализациями по своим
|
||||
витринам — отдельная домашка после этапа 8.
|
||||
|
||||
## Объём пересборки
|
||||
## Ритм пересборки
|
||||
|
||||
Все материализованные витрины пересобираются одним окном — дышащим окном K
|
||||
от позиции мира, тем же, что у заказов. Витринам от заказов окна хватает по
|
||||
построению: день за окном закрыт, его классы и суммы не меняются. Витринам
|
||||
от событий и сессий окно даже избыточно — их дни замерзают сразу.
|
||||
Партиция витрины пересобирается, пока может измениться её источник, —
|
||||
поэтому ритмов три, по числу источников:
|
||||
|
||||
Одно следствие названо явно. `daily_traffic` обогащается картой
|
||||
идентичностей, а карта пересчитывается целиком, и склейка ретроспективна:
|
||||
покупка сегодня делает куку «известной» во всех прошлых днях карты. Дни за
|
||||
окном K в витрину эту новость уже не получат — они хранят число известных
|
||||
на момент закрытия окна. Это решение, а не недосмотр: живое окно показывает
|
||||
текущую склейку, замороженные дни — какой она была тогда, и расхождение
|
||||
между витриной и картой само по себе урок ретроспективности (историю
|
||||
склейки стенд сознательно не хранит — issue #145).
|
||||
- **от событий и сессий** — день замерзает сразу; пересборка догоняет
|
||||
хвост несобранных дней заменой дневных партиций;
|
||||
- **от заказов** — день дышит окном K и закрывается; пересборка заменяет
|
||||
партиции окна, дни за ним закрыты по построению;
|
||||
- **от карты идентичностей** — не замерзает никогда: склейка
|
||||
ретроспективна, покупка сегодня делает куку известной во всех её прошлых
|
||||
днях, а карта пересчитывается целиком.
|
||||
|
||||
Поэтому `daily_traffic` наследует у своего источника и ритм, и механику:
|
||||
полный пересчёт всех дней каждый прогон в `ReplacingMergeTree(_load_ts)`,
|
||||
как у самой карты. Дневные партиции ей не положены — строка в дне одна, и
|
||||
партиция на строку плодила бы микрокуски на ровном месте. Пересчёт дешёв:
|
||||
витрина читает сессии и карту локальным соединением по ключу ко-локации.
|
||||
Пересчитывать точечно только затронутые дни не из чего: для этого надо
|
||||
знать, какие связки новые, а полный пересчёт карты этот след затирает —
|
||||
восстановление следа оставлено лабе повышенной сложности (issue #149).
|
||||
|
||||
## `dm.dq_summary`
|
||||
|
||||
@@ -128,6 +133,14 @@ Airflow. Партиция — день данных; прогон звена DQ
|
||||
расшифровывать. Красное «ещё не построено» честнее.
|
||||
- **Самопроверка пишет в `dq_summary`.** Попытки менти смешались бы с
|
||||
историей качества конвейера.
|
||||
- **Окно K для `daily_traffic` — прошлое замерзает.** Дни за окном хранили
|
||||
бы число известных на момент закрытия — витрина тихо расходится с картой
|
||||
и протаскивает обратно «знание на дату», отвергнутое развилкой карты
|
||||
(#133).
|
||||
- **Инкрементальный пересчёт затронутых дней по `first_matched_at`.**
|
||||
Производственный ход, но на объёмах стенда он экономит неизмеримое, а
|
||||
след новых связок требует вернуть колонку, выкинутую в #133. Стал лабой
|
||||
повышенной сложности — issue #149.
|
||||
- **Superset поверх DDS без слоя DM.** Терялся бы урок «витрина — контракт
|
||||
под потребителя», против раздела 7 спеки.
|
||||
|
||||
|
||||
Reference in new issue
Block a user