docs(dm): вычитан слой витрин вторым горячим ревью
- Зачем:
- после переписывания ритма пересборки в тексте остались швы прежних
формулировок и один разрыв с докой конвейера.
- Что:
- довод против дневных партиций daily_traffic заменён верным: партиция —
единица замены, а витрина заменяется только целиком (число строк тут
ни при чём, иначе довод бил бы и по dq_summary).
- в etl.md к механике REPLACE PARTITION добавлена вторая идемпотентность
конвейера — полная перезапись в ReplacingMergeTree.
- правило ритмов говорит про день, а не партицию; поправлены переносы
строк и обороты.
- Проверка:
- make config-test.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
92d834761c
commit
2f9a26eb0e
2 files changed
+12
-11
No files matched your search
+9
-10
@@ -18,7 +18,7 @@
|
|||||||
Правило выбрано учебной целью, а не ценой запроса. На объёмах стенда
|
Правило выбрано учебной целью, а не ценой запроса. На объёмах стенда
|
||||||
представлениями обошлось бы всё: условия сквозь цепочку представлений
|
представлениями обошлось бы всё: условия сквозь цепочку представлений
|
||||||
проходят ([исследование](../research/2026-08-22-view-predicate-pushdown.md)).
|
проходят ([исследование](../research/2026-08-22-view-predicate-pushdown.md)).
|
||||||
Но агрегат, пересобираемый партициями, — производственный паттерн, ради
|
Но пересборка агрегатов конвейером — производственный паттерн, ради
|
||||||
которого стенд и строится, а пара «таблица рядом с представлением»
|
которого стенд и строится, а пара «таблица рядом с представлением»
|
||||||
показывает: форма — решение по роли витрины, у одного слоя законны обе.
|
показывает: форма — решение по роли витрины, у одного слоя законны обе.
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@
|
|||||||
|
|
||||||
## Ритм пересборки
|
## Ритм пересборки
|
||||||
|
|
||||||
Партиция витрины пересобирается, пока может измениться её источник, —
|
День витрины пересобирается, пока может измениться его источник, —
|
||||||
поэтому ритмов три, по числу источников:
|
поэтому ритмов три, по числу источников:
|
||||||
|
|
||||||
- **от событий и сессий** — день замерзает сразу; пересборка догоняет
|
- **от событий и сессий** — день замерзает сразу; пересборка догоняет
|
||||||
@@ -63,8 +63,8 @@
|
|||||||
|
|
||||||
Поэтому `daily_traffic` наследует у своего источника и ритм, и механику:
|
Поэтому `daily_traffic` наследует у своего источника и ритм, и механику:
|
||||||
полный пересчёт всех дней каждый прогон в `ReplacingMergeTree(_load_ts)`,
|
полный пересчёт всех дней каждый прогон в `ReplacingMergeTree(_load_ts)`,
|
||||||
как у самой карты. Дневные партиции ей не положены — строка в дне одна, и
|
как у самой карты. Дневных партиций у неё нет: партиция — единица замены,
|
||||||
партиция на строку плодила бы микрокуски на ровном месте. Пересчёт дешёв:
|
а эта витрина заменяется только целиком. Пересчёт дешёв:
|
||||||
витрина читает сессии и карту локальным соединением по ключу ко-локации.
|
витрина читает сессии и карту локальным соединением по ключу ко-локации.
|
||||||
Пересчитывать точечно только затронутые дни не из чего: для этого надо
|
Пересчитывать точечно только затронутые дни не из чего: для этого надо
|
||||||
знать, какие связки новые, а полный пересчёт карты этот след затирает —
|
знать, какие связки новые, а полный пересчёт карты этот след затирает —
|
||||||
@@ -103,16 +103,15 @@ Airflow. Партиция — день данных; прогон звена DQ
|
|||||||
константы не прибиваются. В `dq_summary` даг не пишет: он инструмент лабы,
|
константы не прибиваются. В `dq_summary` даг не пишет: он инструмент лабы,
|
||||||
а не история качества конвейера.
|
а не история качества конвейера.
|
||||||
|
|
||||||
Приём проверен на соседнем учебном стенде Airflow + Greenplum: валидационный даг с
|
Приём проверен на соседнем учебном стенде Airflow + Greenplum:
|
||||||
группами проверок по слоям давал менти обратную связь по каждому шагу
|
валидационный даг с группами проверок по слоям давал менти обратную связь
|
||||||
домашки, не трогая рабочий конвейер.
|
по каждому шагу домашки, не трогая рабочий конвейер.
|
||||||
|
|
||||||
## Остаётся нарезке
|
## Остаётся нарезке
|
||||||
|
|
||||||
- Имена задач `dm_transform`, звена DQ и дага самопроверки.
|
- Имена задач `dm_transform`, звена DQ и дага самопроверки.
|
||||||
- Ключи шардирования остальных материализованных витрин — вместе с их
|
- Ключи шардирования остальных материализованных витрин — вместе с их
|
||||||
DDL; правило
|
DDL; правило партиции-донора — в [доке хранилища](storage.md).
|
||||||
партиции-донора — в [доке хранилища](storage.md).
|
|
||||||
- Тексты учебных заданий и точный список проверок обоих контуров.
|
- Тексты учебных заданий и точный список проверок обоих контуров.
|
||||||
- Механика сверки A+C в SQL — рамка в спеке, разделы 4 и 7.
|
- Механика сверки A+C в SQL — рамка в спеке, разделы 4 и 7.
|
||||||
|
|
||||||
@@ -138,7 +137,7 @@ Airflow. Партиция — день данных; прогон звена DQ
|
|||||||
и протаскивает обратно «знание на дату», отвергнутое развилкой карты
|
и протаскивает обратно «знание на дату», отвергнутое развилкой карты
|
||||||
(#133).
|
(#133).
|
||||||
- **Инкрементальный пересчёт затронутых дней по `first_matched_at`.**
|
- **Инкрементальный пересчёт затронутых дней по `first_matched_at`.**
|
||||||
Производственный ход, но на объёмах стенда он экономит неизмеримое, а
|
Производственный ход, но на объёмах стенда его экономия неизмерима, а
|
||||||
след новых связок требует вернуть колонку, выкинутую в #133. Стал лабой
|
след новых связок требует вернуть колонку, выкинутую в #133. Стал лабой
|
||||||
повышенной сложности — issue #149.
|
повышенной сложности — issue #149.
|
||||||
- **Superset поверх DDS без слоя DM.** Терялся бы урок «витрина — контракт
|
- **Superset поверх DDS без слоя DM.** Терялся бы урок «витрина — контракт
|
||||||
|
|||||||
@@ -63,7 +63,9 @@
|
|||||||
вставка через Distributed раскладывает строки по шардам, — затем
|
вставка через Distributed раскладывает строки по шардам, — затем
|
||||||
`REPLACE PARTITION` на кластере атомарно подменяет кусок каждого шарда. Эта
|
`REPLACE PARTITION` на кластере атомарно подменяет кусок каждого шарда. Эта
|
||||||
механика — часть самих трансформаций и строится этапом 4: без неё дневной
|
механика — часть самих трансформаций и строится этапом 4: без неё дневной
|
||||||
прогон не повторяем.
|
прогон не повторяем. Сущности, пересчитываемые целиком, идемпотентны и без
|
||||||
|
замены: полная перезапись в `ReplacingMergeTree` — так живут карта
|
||||||
|
идентичностей и витрина `daily_traffic` ([слой DM](dm.md)).
|
||||||
|
|
||||||
## Не входит
|
## Не входит
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user