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` с явным
|
материализуется: `dm.<имя>_rep` / `_dist` и публичное `dm.<имя>_v` с явным
|
||||||
списком колонок, по общим [конвенциям хранилища](storage.md). Наполняет её
|
списком колонок, по общим [конвенциям хранилища](storage.md). Наполняет её
|
||||||
`dm_transform` заменой дневных партиций — той же механикой, что у сущностей
|
`dm_transform`; ритм и механика пересборки — ниже. Витрина, сохраняющая зерно
|
||||||
DDS ([конвейер](etl.md)); объём пересборки — ниже. Витрина, сохраняющая зерно
|
|
||||||
источника — переименование, обогащение строки, — остаётся обычным
|
источника — переименование, обогащение строки, — остаётся обычным
|
||||||
представлением: копию событий ради других имён колонок не держит ни один
|
представлением: копию событий ради других имён колонок не держит ни один
|
||||||
боевой склад.
|
боевой склад.
|
||||||
@@ -49,21 +48,27 @@ DDS ([конвейер](etl.md)); объём пересборки — ниже.
|
|||||||
от выполненных домашек. Расширение дашборда визуализациями по своим
|
от выполненных домашек. Расширение дашборда визуализациями по своим
|
||||||
витринам — отдельная домашка после этапа 8.
|
витринам — отдельная домашка после этапа 8.
|
||||||
|
|
||||||
## Объём пересборки
|
## Ритм пересборки
|
||||||
|
|
||||||
Все материализованные витрины пересобираются одним окном — дышащим окном K
|
Партиция витрины пересобирается, пока может измениться её источник, —
|
||||||
от позиции мира, тем же, что у заказов. Витринам от заказов окна хватает по
|
поэтому ритмов три, по числу источников:
|
||||||
построению: день за окном закрыт, его классы и суммы не меняются. Витринам
|
|
||||||
от событий и сессий окно даже избыточно — их дни замерзают сразу.
|
|
||||||
|
|
||||||
Одно следствие названо явно. `daily_traffic` обогащается картой
|
- **от событий и сессий** — день замерзает сразу; пересборка догоняет
|
||||||
идентичностей, а карта пересчитывается целиком, и склейка ретроспективна:
|
хвост несобранных дней заменой дневных партиций;
|
||||||
покупка сегодня делает куку «известной» во всех прошлых днях карты. Дни за
|
- **от заказов** — день дышит окном K и закрывается; пересборка заменяет
|
||||||
окном K в витрину эту новость уже не получат — они хранят число известных
|
партиции окна, дни за ним закрыты по построению;
|
||||||
на момент закрытия окна. Это решение, а не недосмотр: живое окно показывает
|
- **от карты идентичностей** — не замерзает никогда: склейка
|
||||||
текущую склейку, замороженные дни — какой она была тогда, и расхождение
|
ретроспективна, покупка сегодня делает куку известной во всех её прошлых
|
||||||
между витриной и картой само по себе урок ретроспективности (историю
|
днях, а карта пересчитывается целиком.
|
||||||
склейки стенд сознательно не хранит — issue #145).
|
|
||||||
|
Поэтому `daily_traffic` наследует у своего источника и ритм, и механику:
|
||||||
|
полный пересчёт всех дней каждый прогон в `ReplacingMergeTree(_load_ts)`,
|
||||||
|
как у самой карты. Дневные партиции ей не положены — строка в дне одна, и
|
||||||
|
партиция на строку плодила бы микрокуски на ровном месте. Пересчёт дешёв:
|
||||||
|
витрина читает сессии и карту локальным соединением по ключу ко-локации.
|
||||||
|
Пересчитывать точечно только затронутые дни не из чего: для этого надо
|
||||||
|
знать, какие связки новые, а полный пересчёт карты этот след затирает —
|
||||||
|
восстановление следа оставлено лабе повышенной сложности (issue #149).
|
||||||
|
|
||||||
## `dm.dq_summary`
|
## `dm.dq_summary`
|
||||||
|
|
||||||
@@ -128,6 +133,14 @@ Airflow. Партиция — день данных; прогон звена DQ
|
|||||||
расшифровывать. Красное «ещё не построено» честнее.
|
расшифровывать. Красное «ещё не построено» честнее.
|
||||||
- **Самопроверка пишет в `dq_summary`.** Попытки менти смешались бы с
|
- **Самопроверка пишет в `dq_summary`.** Попытки менти смешались бы с
|
||||||
историей качества конвейера.
|
историей качества конвейера.
|
||||||
|
- **Окно K для `daily_traffic` — прошлое замерзает.** Дни за окном хранили
|
||||||
|
бы число известных на момент закрытия — витрина тихо расходится с картой
|
||||||
|
и протаскивает обратно «знание на дату», отвергнутое развилкой карты
|
||||||
|
(#133).
|
||||||
|
- **Инкрементальный пересчёт затронутых дней по `first_matched_at`.**
|
||||||
|
Производственный ход, но на объёмах стенда он экономит неизмеримое, а
|
||||||
|
след новых связок требует вернуть колонку, выкинутую в #133. Стал лабой
|
||||||
|
повышенной сложности — issue #149.
|
||||||
- **Superset поверх DDS без слоя DM.** Терялся бы урок «витрина — контракт
|
- **Superset поверх DDS без слоя DM.** Терялся бы урок «витрина — контракт
|
||||||
под потребителя», против раздела 7 спеки.
|
под потребителя», против раздела 7 спеки.
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user