docs(handbook): упрощен язык путеводителя
Зачем: начинающим ученикам трудно читать главы без пояснений терминов и ожидаемого результата примеров. Что: уточнены заголовки и объяснения в пяти главах и вводной, добавлена сверка графика с SQL, обновлены ссылки из заданий и документации генератора. Проверка: SQL и команды сохранены, локальные ссылки проверены; git diff --check пройден. Ревью смысла Sol 6.1 high замечаний не выявило, новые пояснения дополнительно сверены с кодом и настройками.
This commit is contained in:
1 parent
9394b789e5
commit
453a1d6ddf
13 files changed
+98
-75
No files matched your search
+12
-10
@@ -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)
|
||||||
|
|
||||||
|
|||||||
@@ -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).
|
||||||
@@ -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
@@ -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).
|
||||||
@@ -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).
|
|
||||||
@@ -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), а состав витрин — в [справочнике
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
## Подготовка
|
## Подготовка
|
||||||
|
|
||||||
- [«Хранилище и его слои»](../handbook/storage-layers.md);
|
- [«Хранилище и его слои»](../handbook/storage-layers.md);
|
||||||
- [«Потоки Airflow и даги модельного времени»](../handbook/airflow-dags.md).
|
- [«Генерация и обработка данных в Airflow»](../handbook/airflow-dags.md).
|
||||||
|
|
||||||
## Дневные показатели страниц
|
## Дневные показатели страниц
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
## Подготовка
|
## Подготовка
|
||||||
|
|
||||||
- [«Хранилище и его слои»](../handbook/storage-layers.md);
|
- [«Хранилище и его слои»](../handbook/storage-layers.md);
|
||||||
- [«Потоки Airflow и даги модельного времени»](../handbook/airflow-dags.md).
|
- [«Генерация и обработка данных в Airflow»](../handbook/airflow-dags.md).
|
||||||
|
|
||||||
## Показатели визитов
|
## Показатели визитов
|
||||||
|
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
## Подготовка
|
## Подготовка
|
||||||
|
|
||||||
- [«Хранилище и его слои»](../handbook/storage-layers.md);
|
- [«Хранилище и его слои»](../handbook/storage-layers.md);
|
||||||
- [«Потоки Airflow и даги модельного времени»](../handbook/airflow-dags.md).
|
- [«Генерация и обработка данных в Airflow»](../handbook/airflow-dags.md).
|
||||||
|
|
||||||
## Ошибки загрузки и их источники
|
## Ошибки загрузки и их источники
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
## Подготовка
|
## Подготовка
|
||||||
|
|
||||||
- [«Хранилище и его слои»](../handbook/storage-layers.md);
|
- [«Хранилище и его слои»](../handbook/storage-layers.md);
|
||||||
- [«Потоки Airflow и даги модельного времени»](../handbook/airflow-dags.md).
|
- [«Генерация и обработка данных в Airflow»](../handbook/airflow-dags.md).
|
||||||
|
|
||||||
## Покупки по рекламным каналам
|
## Покупки по рекламным каналам
|
||||||
|
|
||||||
|
|||||||
@@ -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#готовые-и-собственные-отчеты).
|
||||||
|
|
||||||
## Проверка результата
|
## Проверка результата
|
||||||
|
|
||||||
|
|||||||
@@ -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
@@ -77,7 +77,7 @@
|
|||||||
и через окружение; имена и примеры собраны в
|
и через окружение; имена и примеры собраны в
|
||||||
[справочнике запуска](../docs/architecture/world.md#как-запустить-генератор).
|
[справочнике запуска](../docs/architecture/world.md#как-запустить-генератор).
|
||||||
Прямой запуск генератора не продвигает сохраненную позицию времени стенда —
|
Прямой запуск генератора не продвигает сохраненную позицию времени стенда —
|
||||||
ей управляют [даги модельного времени](../docs/handbook/airflow-dags.md#даги-мира).
|
ей управляют [даги модельного времени](../docs/handbook/airflow-dags.md#генерация-модельных-дней).
|
||||||
|
|
||||||
Из каталога `generator/` доступны:
|
Из каталога `generator/` доступны:
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user