Витрины DM: форма и состав #135
Notifications
Due Date
No due date set.
Blocks
Depends on
#136 Нарезать тикеты этапа 4 по резолюциям карты
ddmitry/clickstream-data-platform
#130 Модель заказа в DDS: зерно, связи, материализация
ddmitry/clickstream-data-platform
#132 Контракт dds.event_v: атрибуты бизнес-модели
ddmitry/clickstream-data-platform
#134 Запуск трансформаций до etl_pipeline
ddmitry/clickstream-data-platform
Reference: ddmitry/clickstream-data-platform#135
Reference in new issue
Block a user
Part of #127.
Вопрос
Форма и состав слоя DM: база
dm(в DDL её ещё нет), витриныпредставлениями
dm.*_vповерх DDS или материализованными таблицами,устройство
dm.dq_summaryс партиционной заменой (политика «безTRUNCATE»), состав по спеке §7 —
revenue_daily_v,purchase_vs_orders_v(сверка A+C с классами),utm_effectiveness_v,daily_traffic_v(пара «посетители»/«известные пользователи»), переездролей витрин v1 на
dds.event_v— и что из этого получает Supersetэтапом 8.
Сначала прочитать
dds.event_v(блокеры);docs/architecture/testing.md— куда встанут проверки витрин.Резолюция
Форма — по зерну, не по цене запроса. Витрина, меняющая зерно источника (дневной агрегат, сверка по заказам), материализуется:
dm.<имя>_rep/_dist+ публичноеdm.<имя>_v, наполнение — дагомdm_transform, ритм пересборки — по подвижности источника: событийные и сессионные витрины догоняют хвост заменой дневных партиций, заказные дышат окном K, аdaily_trafficвслед за картой идентичностей пересчитывается целиком каждый прогон в ReplacingMergeTree — дневных партиций у неё нет: партиция — единица замены, а витрина заменяется только целиком. Инкремент затронутых дней поfirst_matched_atстенду не нужен и стал идеей лабы повышенной сложности #149 (обсуждение горячего ревью). Витрина, сохраняющая зерно источника, остаётся представлением. На объёмах стенда всё обошлось бы представлениями (исследование #128), но учебная цель — показать, как строят хранилища: пересборка агрегатов партициями — производственный паттерн, а пара «таблица рядом с представлением» показывает, что форма — решение по роли.Дележ витрин: стенд и менти. Стенд строит витрины трёх сюжетов дашборда этапа 8 и инфраструктуру контроля:
revenue_daily(образец для ТЗ),purchase_vs_orders(сверка A+C, ко-локация заказов поcityHash64(order_id)),daily_traffic(пара «посетители»/«известные»),dq_summary. Остальные — учебные задания менти по ТЗ с образцом: разминкаevents_enriched_v, затемtop_pages_daily,session_overview,dq_errors_daily, финаломutm_effectivenessс урокомdeclared_*. Построенная витрина встаёт вdm_transformруками менти — финальный пункт каждого ТЗ (горячее ревью). Дашборд этапа 8 стоит только на витринах стенда; расширение дашборда по своим витринам — домашка после этапа 8.dm.dq_summary. Зерно «день данных × проверка», партиция — день данных, наполнениеREPLACE PARTITION— политика «без TRUNCATE» той же механикой, что у витрин. Пишет её звено DQ.Звено DQ конвейера (туман карты закрыт): встаёт в
etl_pipelineпосле DM, проверяет только объекты стенда — счётная сверка сессий с эталономVisitIDизods.event_v, счётчики классов расхождений против описи по закрытым дням, счётные сверки витрин с DDS-источниками. Рабочее DQ — само учебный материал: как контроль качества устроен в бою.Даг самопроверки домашек — отдельный, без расписания, запуск рукой: задача витрины красная, пока не построено или не сходится, зелёная — когда верно; проверки — инварианты против источников, в
dq_summaryне пишет. Приём перенесён с соседнего учебного стенда Airflow + Greenplum (валидационный дагbookings_validate).База
dmзаводится в DDL вместе с объектами слоя при нарезке. Нарезке же остаются: имена задач, ключи шардирования остальных витрин, тексты ТЗ, точный список проверок, механика сверки A+C в SQL (рамка — спека §4/§7).Отклонённые варианты — в доке: весь слой представлениями; материализовать всё; гибрид по цене запроса; проверки домашек в конвейерном звене; «жёлтый» статус; самопроверка в
dq_summary; Superset поверх DDS.Дока: docs/architecture/dm.md (PR #147).