docs(dm): изложение выбора витрин переписано
- Зачем: - объяснение формы витрин читалось искусственно и использовало неуместное слово «менти». - Что: - выбор таблицы или представления объяснён через конкретные действия в задании. - слово «менти» убрано из dm.md и AGENTS.md. - описание факультатива и ссылка на раздел DM приведены к новому тексту. - Проверка: - git diff --check. - проверено отсутствие слова «менти» в изменённых документах и наличие целей ссылок.
This commit is contained in:
1 parent
f0c7fe0c74
commit
af3f23f9ea
3 files changed
+47
-43
No files matched your search
+38
-34
@@ -5,23 +5,27 @@
|
||||
колонок каждой витрины задаёт раздел 7 мастер-спеки; здесь — форма,
|
||||
наполнение и контроль.
|
||||
|
||||
## Форма: по зерну, не по цене запроса
|
||||
## Таблица или представление
|
||||
|
||||
На этом стенде форма витрины выбрана ради учебной задачи. Витрина, меняющая
|
||||
зерно источника — дневной агрегат, сверка по заказам, —
|
||||
материализуется: `dm.<имя>_rep` / `_dist` и публичное `dm.<имя>_v` с явным
|
||||
списком колонок, по общим [конвенциям хранилища](storage.md). Наполняет её
|
||||
`dm_transform`; ритм и механика пересборки — ниже. Так менти учится пересобирать
|
||||
агрегат конвейером. Витрина, сохраняющая зерно источника — переименование,
|
||||
обогащение строки, — остаётся обычным представлением и не копирует события.
|
||||
Дневной агрегат и сверка по заказам меняют зерно источника. На этом стенде такие
|
||||
результаты хранятся в `dm.<имя>_rep` / `_dist` и читаются через публичное
|
||||
представление `dm.<имя>_v` с явным списком колонок. Имена и устройство объектов
|
||||
следуют общим [конвенциям хранилища](storage.md). Таблицы наполняет
|
||||
`dm_transform`; ритм и механика пересборки описаны ниже. В задании этот путь
|
||||
приходится пройти целиком: рассчитать агрегат, загрузить его и включить
|
||||
обновление в конвейер.
|
||||
|
||||
Цена запроса здесь не определяет форму. На объёмах стенда
|
||||
представлениями обошлось бы всё: условия сквозь цепочку представлений
|
||||
проходят ([исследование](../research/2026-08-22-view-predicate-pushdown.md)).
|
||||
Пара «таблица рядом с представлением» показывает, что форма зависит от роли
|
||||
витрины: в одном слое уместны обе формы.
|
||||
Переименование колонок и обогащение строки зерно не меняют. Такие витрины на
|
||||
стенде остаются обычными представлениями и не хранят вторую копию событий.
|
||||
|
||||
## Кто строит: стенд и менти
|
||||
На объёмах стенда все витрины могли бы остаться представлениями: условия
|
||||
проходят сквозь их цепочку
|
||||
([исследование](../research/2026-08-22-view-predicate-pushdown.md)).
|
||||
Мы все равно оставили материализованные агрегаты ради практики: без них в
|
||||
программе не было бы загрузки и пересборки витрин. Представления дают другой
|
||||
случай: преобразование строк на прежнем зерне.
|
||||
|
||||
## Что готово в стенде, а что остаётся заданием
|
||||
|
||||
Стенд привозит готовыми витрины трёх сюжетов дашборда этапа 8 и
|
||||
инфраструктуру контроля:
|
||||
@@ -34,20 +38,20 @@
|
||||
[картой идентичностей](dds/identity.md);
|
||||
- `dq_summary` — сводка проверок качества (ниже).
|
||||
|
||||
Остальные витрины спеки — учебные задания: менти строит их сам по ТЗ с
|
||||
образцом. Разминка — представление `events_enriched_v` (зерно события),
|
||||
затем агрегаты `top_pages_daily`, `session_overview` и `dq_errors_daily`,
|
||||
последней — самая содержательная `utm_effectiveness` с уроком `declared_*`.
|
||||
Построенная витрина встаёт в конвейер руками менти: финальный пункт ТЗ
|
||||
каждого агрегата — добавить задачу своей витрины в `dm_transform`. До этого
|
||||
конвейер о ней не знает и остаётся зелёным, после — витрина пересобирается
|
||||
наравне со стендовыми. У разминочного представления такого пункта нет:
|
||||
пересобирать нечего. Тексты заданий — в [`docs/labs/`](../labs/README.md).
|
||||
Остальные витрины спеки нужно построить в учебных заданиях по готовому ТЗ и
|
||||
образцу. Разминка — представление `events_enriched_v` (зерно события), затем
|
||||
агрегаты `top_pages_daily`, `session_overview` и `dq_errors_daily`, последней —
|
||||
самая содержательная `utm_effectiveness` с уроком `declared_*`. В финале
|
||||
каждого задания с агрегатом его задачу нужно добавить в `dm_transform`. До
|
||||
этого конвейер о витрине не знает, после — пересобирает её вместе со
|
||||
стендовыми. Представление из разминки добавлять некуда: его не нужно
|
||||
пересобирать. Тексты заданий лежат в [`docs/labs/`](../labs/README.md).
|
||||
|
||||
Дашборд этапа 8 стоит только на витринах стенда: приёмка этапа не зависит
|
||||
от выполненных домашек. Свой дашборд по витринам менти —
|
||||
[необязательная лаба](../labs/optional/superset-dashboard.md), доступная после
|
||||
ступени 2. Устройство стендового дашборда — в [доке зоны Superset](superset.md).
|
||||
Дашборд этапа 8 читает только готовые витрины стенда, поэтому его приёмка не
|
||||
зависит от домашних заданий. Отдельный дашборд по учебным витринам можно
|
||||
собрать в [факультативном задании](../labs/optional/superset-dashboard.md),
|
||||
доступном после ступени 2. Устройство стендового дашборда описано в
|
||||
[справочнике Superset](superset.md).
|
||||
|
||||
## Ритм пересборки
|
||||
|
||||
@@ -214,8 +218,8 @@ business_key`.
|
||||
|
||||
## Даг самопроверки
|
||||
|
||||
Домашки контролирует `homework_check` — отдельный даг без расписания: менти
|
||||
запускает его рукой. По задаче на каждое из
|
||||
Домашние задания проверяет `homework_check` — отдельный даг без расписания,
|
||||
который запускают вручную. В нём есть задача для каждого из
|
||||
[пяти заданий по витринам](../labs/README.md).
|
||||
Задача красная, пока витрины нет или счёт не сходится, и зелёная, когда
|
||||
построено верно; сообщение об ошибке говорит, что не так и куда смотреть. Проверки — инварианты против источников витрины,
|
||||
@@ -223,8 +227,8 @@ business_key`.
|
||||
лабы, а не история качества конвейера.
|
||||
|
||||
Приём проверен на соседнем учебном стенде Airflow + Greenplum:
|
||||
валидационный даг с группами проверок по слоям давал менти обратную связь
|
||||
по каждому шагу домашки, не трогая рабочий конвейер.
|
||||
валидационный даг с группами проверок по слоям давал обратную связь по каждому
|
||||
шагу задания, не трогая рабочий конвейер.
|
||||
|
||||
## Отклонённые варианты
|
||||
|
||||
@@ -232,7 +236,7 @@ business_key`.
|
||||
производственный паттерн слоя — пересборка агрегатов — остался бы
|
||||
невидим, а `dm_transform` — без работы.
|
||||
- **Материализовать всё.** Копия событий ради переименования колонок —
|
||||
антипаттерн, который менти увёз бы в бой.
|
||||
лишняя; такой пример приучал бы без нужды дублировать исходные данные.
|
||||
- **Гибрид по цене запроса.** Выбор формы по стоимости, которой на объёмах
|
||||
стенда нет: сторож без настоящей опасности.
|
||||
- **Проверки домашек в конвейерном звене DQ.** Конвейер стоял бы красным до
|
||||
@@ -241,8 +245,8 @@ business_key`.
|
||||
- **«Жёлтый» статус недостроенной витрины.** У задачи Airflow нет такого
|
||||
состояния; изображать его логами — семантика, которую пришлось бы
|
||||
расшифровывать. Красное «ещё не построено» честнее.
|
||||
- **Самопроверка пишет в `dq_summary`.** Попытки менти смешались бы с
|
||||
историей качества конвейера.
|
||||
- **Самопроверка пишет в `dq_summary`.** Результаты учебных попыток смешались бы
|
||||
с историей качества конвейера.
|
||||
- **Окно заказов для `daily_traffic` — прошлое замерзает.** Дни за окном хранили
|
||||
бы число известных на момент закрытия — витрина тихо расходится с картой
|
||||
и протаскивает обратно «знание на дату», отвергнутое развилкой карты
|
||||
|
||||
Reference in new issue
Block a user