docs(handbook): упрощен язык путеводителя

Зачем: начинающим ученикам трудно читать главы без пояснений терминов
и ожидаемого результата примеров.

Что: уточнены заголовки и объяснения в пяти главах и вводной, добавлена
сверка графика с SQL, обновлены ссылки из заданий и документации генератора.

Проверка: SQL и команды сохранены, локальные ссылки проверены;
git diff --check пройден. Ревью смысла Sol 6.1 high замечаний не выявило,
новые пояснения дополнительно сверены с кодом и настройками.
This commit is contained in:
ddadmin committed 2026-10-18 19:59:21 +02:00
1 parent 9394b789e5
commit 453a1d6ddf
13 files changed
+98 -75

No files matched your search

+12 -10
View File
@@ -4,9 +4,11 @@
и попадают в отчеты. В главах есть короткие примеры, которые можно выполнить и попадают в отчеты. В главах есть короткие примеры, которые можно выполнить
на запущенном стенде перед переходом к учебным заданиям. на запущенном стенде перед переходом к учебным заданиям.
## Как читать ## Порядок чтения
Читайте главы в порядке ниже. Незнакомые термины можно найти в Сначала запустите стенд по [инструкции](../../README.md#быстрый-старт).
Затем читайте главы по порядку и выполняйте примеры из них.
Незнакомые термины можно найти в
[словаре понятий](../../CONTEXT.md), а подробности устройства — [словаре понятий](../../CONTEXT.md), а подробности устройства —
в [технических справочниках](../architecture/). К ним достаточно обращаться в [технических справочниках](../architecture/). К ним достаточно обращаться
по мере необходимости. После путеводителя переходите к по мере необходимости. После путеводителя переходите к
@@ -19,27 +21,27 @@ Gitea показывает HTML как текст. Откройте файл и
или скачайте его кнопкой «Raw» и откройте в браузере. или скачайте его кнопкой «Raw» и откройте в браузере.
Сверяйтесь с картой при чтении главы «Хранилище и его слои». Сверяйтесь с картой при чтении главы «Хранилище и его слои».
## Главы ## Содержание
### [Хранилище и его слои](storage-layers.md) ### [Хранилище и его слои](storage-layers.md)
Как меняются данные при переходе из Kafka в слои STG, ODS, DDS и DM. Как меняются данные при переходе из Kafka в слои STG, ODS, DDS и DM.
В конце главы вы посмотрите события, сессии и выручку с помощью SQL. В конце главы вы посмотрите события, сессии и выручку с помощью SQL.
### [Потоки Airflow и даги модельного времени](airflow-dags.md) ### [Генерация и обработка данных в Airflow](airflow-dags.md)
Какие даги создают новые данные, а какие обрабатывают их в хранилище. Какие даги создают новые данные, а какие обрабатывают их в хранилище.
Вы запустите генерацию и обработку за день и посмотрите результат в витринах. Вы сравните содержимое витрин до и после обработки нового дня.
### [Мониторинг: куда смотреть](monitoring.md) ### [Мониторинг в Grafana](monitoring.md)
Что показывают панели Grafana и как меняются их показания, пока в стенд Что показывают панели Grafana и как меняются их показания, пока в стенд
поступают события и заказы. поступают события и заказы. Вы увидите, почему заказы обновляются реже событий.
### [Немного Superset](superset.md) ### [Отчеты в Superset](superset.md)
Как Superset строит графики по витринам и что происходит с вашими отчетами Как Superset строит графики по витринам. Вы сравните числа на готовом графике
при перезапуске стенда. с результатом SQL и узнаете, какие отчеты сохраняются при перезапуске стенда.
### [Генератор: откуда берутся данные](generator.md) ### [Генератор: откуда берутся данные](generator.md)
+14 -12
View File
@@ -1,19 +1,20 @@
# Потоки Airflow и даги модельного времени # Генерация и обработка данных в Airflow
Airflow управляет генерацией данных и их обработкой в хранилище. Это разные Airflow управляет генерацией данных и их обработкой в хранилище. Это разные
этапы: сначала в Kafka поступают события и заказы за день работы магазина, этапы: сначала в Kafka поступают события и заказы за день работы магазина,
затем по ним рассчитываются данные DDS и витрины DM. затем по ним рассчитываются данные DDS и витрины DM.
Даг описывает задачи Airflow и порядок их выполнения.
```mermaid ```mermaid
flowchart LR flowchart LR
world_initialize --> etl_pipeline world_initialize --> etl_pipeline
world_live_day --> etl_pipeline world_live_day --> etl_pipeline
manual[запуск рукой] --> etl_pipeline manual[ручной запуск] --> etl_pipeline
etl_pipeline --> dds_transform --> dm_transform --> dq_check etl_pipeline --> dds_transform --> dm_transform --> dq_check
world_next_day --> sources[источники без ETL] world_next_day --> sources[источники без ETL]
``` ```
## Два потока входят по-разному ## Загрузка событий и заказов
События поступают в топик `hits` и обрабатываются по мере поступления: События поступают в топик `hits` и обрабатываются по мере поступления:
материализованные представления переносят строки из STG в ODS без участия материализованные представления переносят строки из STG в ODS без участия
@@ -24,7 +25,7 @@ Airflow.
Даг `orders_ingest` загружает ее целиком. Такой способ приема называется Даг `orders_ingest` загружает ее целиком. Такой способ приема называется
[пакетным](../../CONTEXT.md). [пакетным](../../CONTEXT.md).
## Даги мира ## Генерация модельных дней
В документации миром называется учебный магазин с его посетителями, В документации миром называется учебный магазин с его посетителями,
товарами и заказами. Время в нем идет отдельно от календарного. товарами и заказами. Время в нем идет отдельно от календарного.
@@ -54,7 +55,7 @@ Airflow.
номер дня остается прежним. Подробности — в [справочнике генератора номер дня остается прежним. Подробности — в [справочнике генератора
и модельного времени](../architecture/world.md#даги-модельного-времени). и модельного времени](../architecture/world.md#даги-модельного-времени).
## Дневной конвейер ## Обработка данных в хранилище
Даг `etl_pipeline` по очереди запускает `dds_transform`, `dm_transform` Даг `etl_pipeline` по очереди запускает `dds_transform`, `dm_transform`
и `dq_check`, дожидаясь завершения каждого. Они рассчитывают данные DDS, и `dq_check`, дожидаясь завершения каждого. Они рассчитывают данные DDS,
@@ -84,20 +85,21 @@ Airflow.
проверок описан в [разделе «Звено DQ проверок описан в [разделе «Звено DQ
конвейера»](../architecture/dm.md#звено-dq-конвейера). конвейера»](../architecture/dm.md#звено-dq-конвейера).
## Как найти в интерфейсе ## Поиск дагов в Airflow
Даги мира ищите по тегам «модельное время» и «жизненный цикл мира». Остальные Даги мира ищите по тегам «модельное время» и «жизненный цикл мира». Остальные
даги ищите по тегам «заказы», `etl`, `dds`, `dm` и `dq`. `homework_check` с даги ищите по тегам «заказы», `etl`, `dds`, `dm` и `dq`. `homework_check` с
тегами `dm` и `labs` проверяет домашние работы; о нем рассказано в учебных тегами `dm` и `labs` проверяет домашние работы; о нем рассказано в учебных
заданиях. заданиях.
## Посмотрите сами ## Один день от генерации до витрин
Откройте Airflow по адресу из раздела [«Адреса и Откройте Airflow по адресу из раздела [«Адреса и
пароли»](../../README.md#адреса-и-пароли). В Admin → Variables найдите пароли»](../../README.md#адреса-и-пароли). В Admin → Variables найдите
`world_position`. Затем запустите `world_next_day` на один день по [инструкции `world_position` и запомните его значение. Затем запустите `world_next_day`
из README](../../README.md#добавить-данные-за-следующие-дни). Убедитесь, что на один день по [инструкции из README](../../README.md#добавить-данные-за-следующие-дни). Убедитесь, что
`orders_ingest` завершился успешно, а в витринах нового дня еще нет. `orders_ingest` завершился успешно, а в витринах нового дня еще нет.
Значение `world_position` должно увеличиться на один.
Запустите `etl_pipeline` вручную и дождитесь его завершения. Запустите `etl_pipeline` вручную и дождитесь его завершения.
В DBeaver, подключенном по В DBeaver, подключенном по
@@ -121,8 +123,8 @@ LIMIT 3;
приходит слепок за день D−1. Выручка дня D появится после генерации приходит слепок за день D−1. Выручка дня D появится после генерации
дня D+1 и запуска конвейера. дня D+1 и запуска конвейера.
## Куда дальше ## Следующая глава и справочники
Детали — в справочниках [конвейера](../architecture/etl.md) и Детали — в справочниках [конвейера](../architecture/etl.md) и
[мира](../architecture/world.md). Следующая глава — [«Мониторинг: куда [мира](../architecture/world.md). Следующая глава —
смотреть»](monitoring.md). [«Мониторинг в Grafana»](monitoring.md).
+7 -7
View File
@@ -5,7 +5,7 @@
магазина раз в модельные сутки выгружает состояние заказов в топик `orders`. магазина раз в модельные сутки выгружает состояние заказов в топик `orders`.
Эта дневная выгрузка называется слепком. Эта дневная выгрузка называется слепком.
## Что он производит ## События сайта и заказы
Событие содержит сведения о действии посетителя: например, время, Событие содержит сведения о действии посетителя: например, время,
адрес страницы и идентификатор посетителя. Формат соответствует образцу адрес страницы и идентификатор посетителя. Формат соответствует образцу
@@ -20,11 +20,11 @@
разобраны в [отдельном разобраны в [отдельном
справочнике](../architecture/orders/snapshot.md). справочнике](../architecture/orders/snapshot.md).
## Почему данные всегда одни и те же ## Почему начальные данные повторяются
Случайные решения генератора зависят от заданного числа — Случайные решения генератора зависят от заданного числа —
[зерна генерации](../architecture/generator/seeds.md) — и номера дня. [зерна генерации](../architecture/generator/seeds.md) — и номера дня.
При неизменных настройках и версии генератора одинаковые зерно и день При неизменных коде, каталоге товаров и настройках одинаковые зерно и день
дают одинаковые события. Поэтому при создании стенда вы каждый раз дают одинаковые события. Поэтому при создании стенда вы каждый раз
получаете те же начальные данные. Повторный `make up` на работающем стенде получаете те же начальные данные. Повторный `make up` на работающем стенде
сохраняет уже загруженные данные. сохраняет уже загруженные данные.
@@ -34,10 +34,10 @@
В документации этот файл называется паспортом мира. С ним можно сверить В документации этот файл называется паспортом мира. С ним можно сверить
результат генерации и проверить, все ли события загрузились в ODS. результат генерации и проверить, все ли события загрузились в ODS.
## Кто его запускает ## Запуск генератора
На стенде генератором управляют [даги модельного На стенде генератором управляют [даги модельного
времени](airflow-dags.md#даги-мира). Его можно запустить и напрямую. Команды времени](airflow-dags.md#генерация-модельных-дней). Его можно запустить и напрямую. Команды
собраны в [справочнике генератора и модельного собраны в [справочнике генератора и модельного
времени](../architecture/world.md#как-запустить-генератор). времени](../architecture/world.md#как-запустить-генератор).
@@ -45,7 +45,7 @@
В живом режиме события поступают постепенно, как в работающем магазине, В живом режиме события поступают постепенно, как в работающем магазине,
но время идет ускоренно: модельные сутки занимают около 24 минут. но время идет ускоренно: модельные сутки занимают около 24 минут.
## Посмотрите сами ## Сверка с паспортом мира
Подключитесь из DBeaver по [инструкции](../../README.md#подключиться-из-dbeaver) Подключитесь из DBeaver по [инструкции](../../README.md#подключиться-из-dbeaver)
и выполните запрос: и выполните запрос:
@@ -62,7 +62,7 @@ ORDER BY EventDate;
Числа должны совпасть. Если вы уже генерировали следующие дни, Числа должны совпасть. Если вы уже генерировали следующие дни,
в результате запроса будут дополнительные даты; в паспорте их нет. в результате запроса будут дополнительные даты; в паспорте их нет.
## Куда дальше ## Учебные задания и справочники
Подробнее генератор разобран в [README папки Подробнее генератор разобран в [README папки
`generator/`](../../generator/README.md) и в [справочнике его `generator/`](../../generator/README.md) и в [справочнике его
+18 -15
View File
@@ -1,20 +1,19 @@
# Мониторинг: куда смотреть # Мониторинг в Grafana
В Grafana настроены три дашборда. «Данные» показывает загрузку и обработку В Grafana настроены три дашборда — экрана с показателями и графиками.
событий и заказов, «Кластер» — состояние узлов и самого ClickHouse, «Данные» показывает загрузку и обработку событий и заказов,
а «Запросы» — выполненные запросы и затраченные на них ресурсы. «Кластер» — состояние узлов и самого ClickHouse, а «Запросы» — выполненные
запросы и затраченные на них ресурсы.
Prometheus собирает метрики с двух узлов ClickHouse, ClickHouse Keeper
и экспортера Kafka — службы, которая предоставляет метрики Kafka.
Grafana получает данные из Prometheus и напрямую из ClickHouse.
На панелях не заданы пороги для цветовых предупреждений: оценивать показания На панелях не заданы пороги для цветовых предупреждений: оценивать показания
вы будете самостоятельно. Качество данных автоматически проверяет вы будете самостоятельно. Качество данных автоматически проверяет
даг `dq_check`. даг `dq_check`.
## Дашборд «Данные» ## Дашборд «Данные»
«Свежесть» показывает, сколько времени прошло с последнего события и с «Свежесть» показывает, сколько реального времени прошло с поступления
последнего заказа в ODS. Показатель для заказов растет весь модельный день последних успешно разобранных событий и заказов. Время поступления хранится
в колонке `_load_ts` слоя ODS. Показатель для заказов растет весь модельный день
и снижается, когда поступает очередная дневная выгрузка — слепок. и снижается, когда поступает очередная дневная выгрузка — слепок.
Это ожидаемо: заказы загружаются раз в день. Это ожидаемо: заказы загружаются раз в день.
@@ -33,7 +32,11 @@ STG: по нему видно, поступила ли очередная выг
Источники и правила чтения всех панелей разобраны в [справочнике дашборда Источники и правила чтения всех панелей разобраны в [справочнике дашборда
«Данные»](../architecture/monitoring/data.md). «Данные»](../architecture/monitoring/data.md).
## Почему у панелей разные источники ## Источники показателей
Grafana получает данные напрямую из ClickHouse и через Prometheus.
Prometheus собирает метрики с двух узлов ClickHouse, ClickHouse Keeper
и экспортера Kafka — службы, которая предоставляет метрики Kafka.
Свежесть считается по ODS: если новые сообщения перестали разбираться, Свежесть считается по ODS: если новые сообщения перестали разбираться,
показатель будет расти. Число поступивших сообщений берется из STG, показатель будет расти. Число поступивших сообщений берется из STG,
@@ -45,7 +48,7 @@ STG: по нему видно, поступила ли очередная выг
всех доставленных сообщений. Подробности — в [разделе о слоях всех доставленных сообщений. Подробности — в [разделе о слоях
панелей](../architecture/monitoring/data.md#почему-слои-у-панелей-разные). панелей](../architecture/monitoring/data.md#почему-слои-у-панелей-разные).
## Два других дашборда ## Состояние кластера и запросы
Открывайте «Кластер», чтобы проверить нагрузку на процессор, использование Открывайте «Кластер», чтобы проверить нагрузку на процессор, использование
памяти и дисков, число частей таблиц и ход их слияний в ClickHouse. Здесь же памяти и дисков, число частей таблиц и ход их слияний в ClickHouse. Здесь же
@@ -58,11 +61,11 @@ STG: по нему видно, поступила ли очередная выг
[справочник дашборда [справочник дашборда
«Запросы»](../architecture/monitoring/queries.md). «Запросы»](../architecture/monitoring/queries.md).
## Посмотрите сами ## Показатели за один модельный день
Откройте Grafana по адресу из раздела [«Адреса и Откройте Grafana по адресу из раздела [«Адреса и
пароли»](../../README.md#адреса-и-пароли), затем дашборд «Данные». Запустите в пароли»](../../README.md#адреса-и-пароли), затем дашборд «Данные». Запустите в
Airflow [`world_live_day`](airflow-dags.md#даги-мира): модельный день займет Airflow [`world_live_day`](airflow-dags.md#генерация-модельных-дней): модельный день займет
около двадцати четырех минут. около двадцати четырех минут.
Смотрите свежесть событий и свежесть заказов по отдельности. Пока день идет, Смотрите свежесть событий и свежесть заказов по отдельности. Пока день идет,
@@ -73,11 +76,11 @@ Airflow [`world_live_day`](airflow-dags.md#даги-мира): модельны
при генерации следующего дня. Даг пока продолжает работу, ожидая завершения при генерации следующего дня. Даг пока продолжает работу, ожидая завершения
обработки данных в дневном конвейере. обработки данных в дневном конвейере.
## Куда дальше ## Следующая глава и справочники
Устройство мониторинга описано в [техническом Устройство мониторинга описано в [техническом
справочнике](../architecture/monitoring/README.md), панели дашборда «Данные» — справочнике](../architecture/monitoring/README.md), панели дашборда «Данные» —
в [отдельном разделе](../architecture/monitoring/data.md). в [отдельном разделе](../architecture/monitoring/data.md).
Почему выбраны именно эти показатели, объясняет Почему выбраны именно эти показатели, объясняет
[ADR 0002](../adr/0002-monitoring-scope.md). Следующая глава — [ADR 0002](../adr/0002-monitoring-scope.md). Следующая глава —
[«Немного Superset»](superset.md). [«Отчеты в Superset»](superset.md).
+26 -16
View File
@@ -1,16 +1,17 @@
# Хранилище и его слои # Хранилище и его слои
В хранилище приходят два потока из Kafka: в топике `hits` — события В Kafka поступают события сайта, или кликстрим, и заказы магазина.
кликстрима, в `orders` — заказы магазина. Оба проходят один путь: STG → ODS → Для событий выделен топик `hits`, для заказов — `orders`.
DDS → DM. В STG сообщения сохраняются как есть, в ODS разбираются по полям, Из Kafka данные проходят четыре слоя хранилища. В STG сообщения сохраняются
в DDS из них собираются события, заказы и сессии, а в DM — витрины для отчетов. как есть, в ODS разбираются по полям, в DDS из них собираются события,
заказы и сессии, а в DM — витрины для отчетов.
```mermaid ```mermaid
flowchart LR flowchart LR
Kafka --> STG --> ODS --> DDS --> DM Kafka --> STG --> ODS --> DDS --> DM
``` ```
## Как читать имена ## Имена таблиц и представлений
Для обычного чтения выбирайте представления с суффиксом `_v`. Они позволяют Для обычного чтения выбирайте представления с суффиксом `_v`. Они позволяют
менять устройство таблиц, сохраняя привычные запросы к данным. менять устройство таблиц, сохраняя привычные запросы к данным.
@@ -20,7 +21,7 @@ flowchart LR
Подробный разбор имен есть в [справочнике Подробный разбор имен есть в [справочнике
хранилища](../architecture/storage.md#имена-объектов). хранилища](../architecture/storage.md#имена-объектов).
## STG: как поступило ## STG: исходные сообщения
STG — сырой слой. Он сохраняет сообщение целой строкой, без разбора. Вместе STG — сырой слой. Он сохраняет сообщение целой строкой, без разбора. Вместе
с ним записываются сведения о доставке: топик, партиция, смещение и время с ним записываются сведения о доставке: топик, партиция, смещение и время
@@ -31,7 +32,7 @@ STG — сырой слой. Он сохраняет сообщение цело
удаляются по правилу из [справочника удаляются по правилу из [справочника
хранилища](../architecture/storage.md#срок-жизни-сырых-данных). хранилища](../architecture/storage.md#срок-жизни-сырых-данных).
## ODS: язык источника ## ODS: разбор сообщений
В ODS содержимое сообщения разбирается на колонки с нужными типами данных: В ODS содержимое сообщения разбирается на колонки с нужными типами данных:
датами, числами, строками. Колонки сохраняют имена из источника. Например, датами, числами, строками. Колонки сохраняют имена из источника. Например,
@@ -41,7 +42,7 @@ STG — сырой слой. Он сохраняет сообщение цело
`*_errors` вместе с исходной строкой и классом ошибки. Правильно записанные `*_errors` вместе с исходной строкой и классом ошибки. Правильно записанные
сообщения обрабатываются дальше. сообщения обрабатываются дальше.
## DDS: язык бизнеса ## DDS: события, заказы и сессии
DDS — детальный слой: в нем данные подготовлены для анализа событий, DDS — детальный слой: в нем данные подготовлены для анализа событий,
заказов и сессий. Здесь же хранится карта идентичностей — таблица связей заказов и сессий. Здесь же хранится карта идентичностей — таблица связей
@@ -51,6 +52,8 @@ DDS — детальный слой: в нем данные подготовле
В стенде визитом, или сессией, считают подряд идущие события одного В стенде визитом, или сессией, считают подряд идущие события одного
`ClientID` без пауз дольше 30 минут. Визит не пересекает границу модельных суток. `ClientID` без пауз дольше 30 минут. Визит не пересекает границу модельных суток.
Модельные сутки — день в календаре учебного магазина. Этот календарь
не зависит от текущей даты на вашем компьютере.
Источник передает готовый идентификатор визита `VisitID` по образцу Источник передает готовый идентификатор визита `VisitID` по образцу
Яндекс Метрики. В учебном хранилище сессии рассчитываются заново по времени Яндекс Метрики. В учебном хранилище сессии рассчитываются заново по времени
@@ -61,7 +64,7 @@ DDS — детальный слой: в нем данные подготовле
Готовые сессии читайте через `dds.session_v`. События для самостоятельного Готовые сессии читайте через `dds.session_v`. События для самостоятельного
расчета доступны в `dds.event_v`: в этом представлении `VisitID` скрыт. расчета доступны в `dds.event_v`: в этом представлении `VisitID` скрыт.
## DM: данные для дашбордов ## DM: витрины для отчетов
DM — слой витрин. Витрина — готовый набор показателей для отчета или DM — слой витрин. Витрина — готовый набор показателей для отчета или
дашборда. Здесь уже посчитаны, например, дневная выручка по категориям и дашборда. Здесь уже посчитаны, например, дневная выручка по категориям и
@@ -71,7 +74,7 @@ DM — слой витрин. Витрина — готовый набор по
путь расчета. Состав готовых витрин смотрите в [карте путь расчета. Состав готовых витрин смотрите в [карте
таблиц](../architecture/storage.md#карта-таблиц). таблиц](../architecture/storage.md#карта-таблиц).
## Справочные данные: зона `dic` ## Справочники в базе `dic`
В базе `dic` хранятся готовые справочные данные. Они загружаются отдельно В базе `dic` хранятся готовые справочные данные. Они загружаются отдельно
от событий и заказов и могут использоваться в расчетах любого слоя. от событий и заказов и могут использоваться в расчетах любого слоя.
@@ -81,7 +84,7 @@ DM — слой витрин. Витрина — готовый набор по
устроена зона, смотрите в [разделе о устроена зона, смотрите в [разделе о
справочниках](../architecture/storage.md#справочники). справочниках](../architecture/storage.md#справочники).
## Сквозные ключи ## Связь данных между слоями
Идентификаторы позволяют связать данные из разных слоев. При переходе в DDS Идентификаторы позволяют связать данные из разных слоев. При переходе в DDS
часть колонок переименовывается: например, `WatchID` становится `event_id`. часть колонок переименовывается: например, `WatchID` становится `event_id`.
@@ -99,7 +102,7 @@ DM — слой витрин. Витрина — готовый набор по
[словарь понятий](../../CONTEXT.md#язык). Точные имена объектов и полей сверяйте с [словарь понятий](../../CONTEXT.md#язык). Точные имена объектов и полей сверяйте с
[картой таблиц](../architecture/storage.md#карта-таблиц). [картой таблиц](../architecture/storage.md#карта-таблиц).
## Посмотрите сами ## Примеры запросов
Подключитесь к ClickHouse по инструкции из разделов [«Адреса и Подключитесь к ClickHouse по инструкции из разделов [«Адреса и
пароли»](../../README.md#адреса-и-пароли) и [«Подключиться из пароли»](../../README.md#адреса-и-пароли) и [«Подключиться из
@@ -122,6 +125,8 @@ ORDER BY UTCEventTime
LIMIT 20; LIMIT 20;
``` ```
Каждая строка здесь — отдельное действие посетителя.
Второй запрос покажет 20 сессий того же дня с наибольшим числом событий. Второй запрос покажет 20 сессий того же дня с наибольшим числом событий.
Сессии рассчитаны по всем событиям дня: Сессии рассчитаны по всем событиям дня:
@@ -140,7 +145,12 @@ ORDER BY events_total DESC
LIMIT 20; LIMIT 20;
``` ```
Третий запрос покажет готовую выручку по категориям за тот же день: Теперь одна строка представляет целый визит. `events_total` показывает,
сколько событий в него вошло; начало и конец визита записаны в
`started_at` и `finished_at`.
Третий запрос покажет выручку магазина по категориям за тот же день.
Эта витрина рассчитана по заказам:
```sql ```sql
SELECT SELECT
@@ -153,13 +163,13 @@ WHERE report_date = '2026-06-01'
ORDER BY revenue DESC; ORDER BY revenue DESC;
``` ```
Здесь одна строка содержит итоги дня для категории товаров.
Все три запроса читают представления `_v`. Все три запроса читают представления `_v`.
## Куда дальше ## Следующая глава и справочники
Откройте [интерактивную карту](architecture-map.html) из своей копии Откройте [интерактивную карту](architecture-map.html) из своей копии
репозитория и проследите путь данных. репозитория и проследите путь данных.
Список объектов, сроки хранения и устройство таблиц — в [справочнике Список объектов, сроки хранения и устройство таблиц — в [справочнике
хранилища](../architecture/storage.md). Как данные обрабатываются между слоями — в хранилища](../architecture/storage.md). Как данные обрабатываются между слоями — в
следующей главе: [потоки Airflow и даги модельного следующей главе: [«Генерация и обработка данных в Airflow»](airflow-dags.md).
времени](airflow-dags.md).
+12 -6
View File
@@ -1,4 +1,4 @@
# Немного Superset # Отчеты в Superset
Superset показывает витрины слоя DM в виде графиков. К ClickHouse он Superset показывает витрины слоя DM в виде графиков. К ClickHouse он
подключается пользователем `bi`. Дашборд стенда «Бизнес-сюжеты» собран из трех подключается пользователем `bi`. Дашборд стенда «Бизнес-сюжеты» собран из трех
@@ -24,7 +24,7 @@ Superset показывает витрины слоя DM в виде графи
Затем на основе датасета создается график: выбираются показатели и способ Затем на основе датасета создается график: выбираются показатели и способ
их отображения. Несколько графиков можно разместить на одном дашборде. их отображения. Несколько графиков можно разместить на одном дашборде.
## Стендовые объекты и ваши ## Готовые и собственные отчеты
Готовые датасеты, графики и дашборд сохранены в файлах репозитория Готовые датасеты, графики и дашборд сохранены в файлах репозитория
и импортируются при каждом `make up`. Если изменить их через интерфейс, и импортируются при каждом `make up`. Если изменить их через интерфейс,
@@ -43,13 +43,14 @@ Superset](../architecture/superset.md#импорт-при-каждой-иниц
Последняя дата с выручкой на день раньше последней даты с событиями Последняя дата с выручкой на день раньше последней даты с событиями
кликстрима. Выгрузка заказов за день D поступает при генерации следующего кликстрима. Выгрузка заказов за день D поступает при генерации следующего
дня D+1, а затем обрабатывается конвейером. Вы уже видели эту разницу дня D+1, а затем обрабатывается конвейером. Вы уже видели эту разницу
в [главе об Airflow](airflow-dags.md#посмотрите-сами). Начальное состояние в [главе об Airflow](airflow-dags.md#один-день-от-генерации-до-витрин). Начальное состояние
показано в разделе [«Стартовый мир»](../architecture/world.md#стартовый-мир). показано в разделе [«Стартовый мир»](../architecture/world.md#стартовый-мир).
## Посмотрите сами ## Сверка графика с витриной
Откройте Superset по адресу из раздела [«Адреса и Откройте Superset по адресу из раздела [«Адреса и
пароли»](../../README.md#адреса-и-пароли) и выберите дашборд «Бизнес-сюжеты». пароли»](../../README.md#адреса-и-пароли) и выберите дашборд «Бизнес-сюжеты».
Найдите график «Посетители и известные пользователи».
Затем откройте SQL Lab и выполните запрос: Затем откройте SQL Lab и выполните запрос:
```sql ```sql
@@ -59,9 +60,14 @@ ORDER BY report_date DESC
LIMIT 7; LIMIT 7;
``` ```
Как построить свой отчет, рассказывают [учебные задания](../labs/README.md). Выберите одну дату из результата. На дашборде задайте «Период», в который
она входит, и обновите график. Наведите указатель на точку этой даты:
числа посетителей и известных пользователей должны совпасть с `visitors`
и `known_users` из SQL.
## Куда дальше Как построить собственный отчет, рассказывают [учебные задания](../labs/README.md).
## Следующая глава и справочники
Подключение и настройка Superset описаны в [справочнике Подключение и настройка Superset описаны в [справочнике
Superset](../architecture/superset.md), а состав витрин — в [справочнике Superset](../architecture/superset.md), а состав витрин — в [справочнике
+1 -1
View File
@@ -7,7 +7,7 @@
## Подготовка ## Подготовка
- [«Хранилище и его слои»](../handbook/storage-layers.md); - [«Хранилище и его слои»](../handbook/storage-layers.md);
- [«Потоки Airflow и даги модельного времени»](../handbook/airflow-dags.md). - [«Генерация и обработка данных в Airflow»](../handbook/airflow-dags.md).
## Дневные показатели страниц ## Дневные показатели страниц
+1 -1
View File
@@ -7,7 +7,7 @@
## Подготовка ## Подготовка
- [«Хранилище и его слои»](../handbook/storage-layers.md); - [«Хранилище и его слои»](../handbook/storage-layers.md);
- [«Потоки Airflow и даги модельного времени»](../handbook/airflow-dags.md). - [«Генерация и обработка данных в Airflow»](../handbook/airflow-dags.md).
## Показатели визитов ## Показатели визитов
+1 -1
View File
@@ -6,7 +6,7 @@
## Подготовка ## Подготовка
- [«Хранилище и его слои»](../handbook/storage-layers.md); - [«Хранилище и его слои»](../handbook/storage-layers.md);
- [«Потоки Airflow и даги модельного времени»](../handbook/airflow-dags.md). - [«Генерация и обработка данных в Airflow»](../handbook/airflow-dags.md).
## Ошибки загрузки и их источники ## Ошибки загрузки и их источники
+1 -1
View File
@@ -7,7 +7,7 @@
## Подготовка ## Подготовка
- [«Хранилище и его слои»](../handbook/storage-layers.md); - [«Хранилище и его слои»](../handbook/storage-layers.md);
- [«Потоки Airflow и даги модельного времени»](../handbook/airflow-dags.md). - [«Генерация и обработка данных в Airflow»](../handbook/airflow-dags.md).
## Покупки по рекламным каналам ## Покупки по рекламным каналам
+2 -2
View File
@@ -5,7 +5,7 @@
## Подготовка ## Подготовка
- [«Немного Superset»](../handbook/superset.md); - [«Отчеты в Superset»](../handbook/superset.md);
- [задание 3: `dm.session_overview`](1-3-session-overview.md). - [задание 3: `dm.session_overview`](1-3-session-overview.md).
## График отказов по устройствам ## График отказов по устройствам
@@ -59,7 +59,7 @@ FROM dm.session_overview_v;
``` ```
Стендовые объекты не меняйте. Что переживает `make up`, а что стирает Стендовые объекты не меняйте. Что переживает `make up`, а что стирает
`make clean`, описано в главе [«Немного Superset»](../handbook/superset.md#стендовые-объекты-и-ваши). `make clean`, описано в главе [«Отчеты в Superset»](../handbook/superset.md#готовые-и-собственные-отчеты).
## Проверка результата ## Проверка результата
+2 -2
View File
@@ -6,7 +6,7 @@
## Подготовка ## Подготовка
- [Хранилище и его слои, раздел DDS](../handbook/storage-layers.md#dds-язык-бизнеса); - [Хранилище и его слои, раздел DDS](../handbook/storage-layers.md#dds-события-заказы-и-сессии);
- [формат события: Идентификаторы и время](../formats/clickstream-event.md#идентификаторы-и-время). - [формат события: Идентификаторы и время](../formats/clickstream-event.md#идентификаторы-и-время).
## События и визиты ## События и визиты
@@ -58,7 +58,7 @@ ORDER BY EventDate, ClientID;
для другого пропустили. По списку видно, чьи события нужно исследовать. для другого пропустили. По списку видно, чьи события нужно исследовать.
Расхождений будет всего несколько. Если их нет, мир прожил мало дней. Расхождений будет всего несколько. Если их нет, мир прожил мало дней.
Прогоните несколько дней через [даги модельного времени](../handbook/airflow-dags.md#даги-мира) Прогоните несколько дней через [даги модельного времени](../handbook/airflow-dags.md#генерация-модельных-дней)
и повторите сверку. и повторите сверку.
### Поиск причины расхождения ### Поиск причины расхождения
+1 -1
View File
@@ -77,7 +77,7 @@
и через окружение; имена и примеры собраны в и через окружение; имена и примеры собраны в
[справочнике запуска](../docs/architecture/world.md#как-запустить-генератор). [справочнике запуска](../docs/architecture/world.md#как-запустить-генератор).
Прямой запуск генератора не продвигает сохраненную позицию времени стенда — Прямой запуск генератора не продвигает сохраненную позицию времени стенда —
ей управляют [даги модельного времени](../docs/handbook/airflow-dags.md#даги-мира). ей управляют [даги модельного времени](../docs/handbook/airflow-dags.md#генерация-модельных-дней).
Из каталога `generator/` доступны: Из каталога `generator/` доступны: