From 2f9a26eb0eca83f6b948f3fc4711e933917018b5 Mon Sep 17 00:00:00 2001 From: Dmitry Dementev Date: Tue, 25 Aug 2026 06:37:09 -0400 Subject: [PATCH] =?UTF-8?q?docs(dm):=20=D0=B2=D1=8B=D1=87=D0=B8=D1=82?= =?UTF-8?q?=D0=B0=D0=BD=20=D1=81=D0=BB=D0=BE=D0=B9=20=D0=B2=D0=B8=D1=82?= =?UTF-8?q?=D1=80=D0=B8=D0=BD=20=D0=B2=D1=82=D0=BE=D1=80=D1=8B=D0=BC=20?= =?UTF-8?q?=D0=B3=D0=BE=D1=80=D1=8F=D1=87=D0=B8=D0=BC=20=D1=80=D0=B5=D0=B2?= =?UTF-8?q?=D1=8C=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Зачем: - после переписывания ритма пересборки в тексте остались швы прежних формулировок и один разрыв с докой конвейера. - Что: - довод против дневных партиций daily_traffic заменён верным: партиция — единица замены, а витрина заменяется только целиком (число строк тут ни при чём, иначе довод бил бы и по dq_summary). - в etl.md к механике REPLACE PARTITION добавлена вторая идемпотентность конвейера — полная перезапись в ReplacingMergeTree. - правило ритмов говорит про день, а не партицию; поправлены переносы строк и обороты. - Проверка: - make config-test. Co-Authored-By: Claude Fable 5 --- docs/architecture/dm.md | 19 +++++++++---------- docs/architecture/etl.md | 4 +++- 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/docs/architecture/dm.md b/docs/architecture/dm.md index d59881d..7371074 100644 --- a/docs/architecture/dm.md +++ b/docs/architecture/dm.md @@ -18,7 +18,7 @@ Правило выбрано учебной целью, а не ценой запроса. На объёмах стенда представлениями обошлось бы всё: условия сквозь цепочку представлений проходят ([исследование](../research/2026-08-22-view-predicate-pushdown.md)). -Но агрегат, пересобираемый партициями, — производственный паттерн, ради +Но пересборка агрегатов конвейером — производственный паттерн, ради которого стенд и строится, а пара «таблица рядом с представлением» показывает: форма — решение по роли витрины, у одного слоя законны обе. @@ -50,7 +50,7 @@ ## Ритм пересборки -Партиция витрины пересобирается, пока может измениться её источник, — +День витрины пересобирается, пока может измениться его источник, — поэтому ритмов три, по числу источников: - **от событий и сессий** — день замерзает сразу; пересборка догоняет @@ -63,8 +63,8 @@ Поэтому `daily_traffic` наследует у своего источника и ритм, и механику: полный пересчёт всех дней каждый прогон в `ReplacingMergeTree(_load_ts)`, -как у самой карты. Дневные партиции ей не положены — строка в дне одна, и -партиция на строку плодила бы микрокуски на ровном месте. Пересчёт дешёв: +как у самой карты. Дневных партиций у неё нет: партиция — единица замены, +а эта витрина заменяется только целиком. Пересчёт дешёв: витрина читает сессии и карту локальным соединением по ключу ко-локации. Пересчитывать точечно только затронутые дни не из чего: для этого надо знать, какие связки новые, а полный пересчёт карты этот след затирает — @@ -103,16 +103,15 @@ Airflow. Партиция — день данных; прогон звена DQ константы не прибиваются. В `dq_summary` даг не пишет: он инструмент лабы, а не история качества конвейера. -Приём проверен на соседнем учебном стенде Airflow + Greenplum: валидационный даг с -группами проверок по слоям давал менти обратную связь по каждому шагу -домашки, не трогая рабочий конвейер. +Приём проверен на соседнем учебном стенде Airflow + Greenplum: +валидационный даг с группами проверок по слоям давал менти обратную связь +по каждому шагу домашки, не трогая рабочий конвейер. ## Остаётся нарезке - Имена задач `dm_transform`, звена DQ и дага самопроверки. - Ключи шардирования остальных материализованных витрин — вместе с их - DDL; правило - партиции-донора — в [доке хранилища](storage.md). + DDL; правило партиции-донора — в [доке хранилища](storage.md). - Тексты учебных заданий и точный список проверок обоих контуров. - Механика сверки A+C в SQL — рамка в спеке, разделы 4 и 7. @@ -138,7 +137,7 @@ Airflow. Партиция — день данных; прогон звена DQ и протаскивает обратно «знание на дату», отвергнутое развилкой карты (#133). - **Инкрементальный пересчёт затронутых дней по `first_matched_at`.** - Производственный ход, но на объёмах стенда он экономит неизмеримое, а + Производственный ход, но на объёмах стенда его экономия неизмерима, а след новых связок требует вернуть колонку, выкинутую в #133. Стал лабой повышенной сложности — issue #149. - **Superset поверх DDS без слоя DM.** Терялся бы урок «витрина — контракт diff --git a/docs/architecture/etl.md b/docs/architecture/etl.md index cd8adea..4ce9370 100644 --- a/docs/architecture/etl.md +++ b/docs/architecture/etl.md @@ -63,7 +63,9 @@ вставка через Distributed раскладывает строки по шардам, — затем `REPLACE PARTITION` на кластере атомарно подменяет кусок каждого шарда. Эта механика — часть самих трансформаций и строится этапом 4: без неё дневной -прогон не повторяем. +прогон не повторяем. Сущности, пересчитываемые целиком, идемпотентны и без +замены: полная перезапись в `ReplacingMergeTree` — так живут карта +идентичностей и витрина `daily_traffic` ([слой DM](dm.md)). ## Не входит