Files
clickstream-data-platform/docs/labs
ddadmin 453a1d6ddf docs(handbook): упрощен язык путеводителя
Зачем: начинающим ученикам трудно читать главы без пояснений терминов
и ожидаемого результата примеров.

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

Проверка: SQL и команды сохранены, локальные ссылки проверены;
git diff --check пройден. Ревью смысла Sol 6.1 high замечаний не выявило,
новые пояснения дополнительно сверены с кодом и настройками.
2026-10-18 19:59:21 +02:00
..

Учебные задания

Вы будете достраивать хранилище небольшого интернет-магазина. Стенд уже загружает события сайта и заказы, обрабатывает их и строит несколько отчетов. Сначала вы подготовите данные для новых отчетов, затем разберетесь, как работают расчеты и загрузка, и перепишете часть из них.

Основная программа состоит из семи ступеней. Проходите их по порядку, факультативы выбирайте по желанию. Перед первым заданием прочитайте главу «Хранилище и его слои» и выполните запросы из нее: они покажут данные, с которыми предстоит работать.

Порядок заданий

Ступень Задания Содержание
1 Пять витрин для отчетов подготовить данные о событиях, страницах, визитах, ошибках загрузки и рекламе; задания перечислены ниже
2 Свой график в Superset построить график по своей витрине и проверить числа на нем
3 Сессии из событий объединить действия посетителя в визиты и сравнить их с визитами источника
4 Расчет сессий в стенде включить свой расчет в готовую обработку данных и проверить результат
5 Проверки качества заказов
Разбор заказов в ODS
Сборка заказов в DDS
сначала написать проверки качества, затем с их помощью проверить свою обработку заказов
6 Разбор сырых событий извлечь поля из сообщений и сравнить результат с готовым разбором стенда
7 Мониторинг: куда смотреть найти тяжелые запросы и разобраться, почему данные обновляются с разной частотой

Ступень 1: витрины для отчетов

Витрина готовит данные для конкретного отчета. В стенде они находятся в базе dm: это слой DM. Витрины выручки, трафика, сверки покупок с заказами и сводка качества уже готовы. Вы добавите еще пять.

№ Витрина Содержание задания
1 События для анализа: events_enriched_v выбрать нужные поля и добавить вычисляемые, сохранив одну строку на событие
2 Показатели страниц по дням: top_pages_daily сохранить итоги в таблице и настроить их обновление через Airflow
3 Визиты по устройствам: session_overview хранить суммы и счетчики для расчета средних и долей
4 Ошибки загрузки по дням: dq_errors_daily сохранить число ошибок даже после удаления исходных строк
5 Показатели рекламы: utm_effectiveness различать суммы покупок из событий сайта и выручку по заказам магазина

Начните с первого задания: для него достаточно одного представления. В заданиях 2–5 понадобятся таблицы и их обновление по дням. К общим правилам ниже возвращайтесь по мере работы.

Создание и обновление витрин

Источники данных

События читайте из dds.event_v, сессии из dds.session_v. Суффикс _v обозначает обычное представление: оно выполняет сохраненный запрос при чтении. Такие представления сохраняют привычные имена и состав колонок, когда внутреннее устройство таблиц меняется.

Каждая учебная витрина читает готовый источник и не зависит от других учебных витрин. В задании 4 источниками служат таблицы ошибок ODS: представлений для них нет.

Таблицы и представления

В заданиях 2–5 вы группируете исходные строки. Например, в top_pages_daily одна строка содержит итоги для одной страницы за день. То, чему соответствует одна строка, называют зерном. На стенде итоги с новым зерном сохраняют в таблицах. Отчеты читают готовые числа.

Новый расчет сначала записывают в промежуточную таблицу. Пока он готовится, отчеты читают прежние данные из основной. Затем готовыми разделами промежуточной таблицы заменяют разделы основной. Раздел называется партицией; в этих заданиях он содержит данные одного дня. Промежуточную таблицу также называют донором.

На примере top_pages_daily пять объектов выглядят так:

Объект Для чего нужен
dm.top_pages_daily_rep Хранит рассчитанные строки на каждом шарде
dm.top_pages_daily_dist Читает строки со всех шардов и распределяет запись между ними
dm.top_pages_daily_stage_rep Хранит новый расчет до замены данных в основной таблице
dm.top_pages_daily_stage_dist Распределяет запись нового расчета между шардами
dm.top_pages_daily_v Дает отчетам доступ к готовой витрине; явно перечисляет ее колонки

Распределение по шардам

Каждый из двух шардов стенда хранит свою часть данных. Записывайте строки через таблицы _dist: они выбирают шард по ключу шардирования. Прямая запись в _rep оставит строки на том узле, где выполнен запрос.

Ключ для своей витрины выберите сами. Проверьте распределение строк между шардами и объясните, почему выбранного ключа достаточно. Пример обоснования для dm.revenue_daily_dist есть в sql/ddl/55-dm-tables.sql.

Создайте промежуточную таблицу через AS <цель>_rep, сохранив структуру и ключи основной. У обеих таблиц _dist должен быть одинаковый ключ шардирования: замена партиции выполняется внутри каждого шарда и не перераспределяет строки. Подробности есть в разделе «Раскладка по шардам».

SQL-файлы и запуск расчета

Команды создания таблиц и представлений (DDL) сохраняйте в sql/ddl/70-labs.sql. При создании мира этот файл выполняется после стендовых файлов. В работающем стенде примените команды сами по инструкции ниже: сохранение файла и повторный make up их не выполнят.

Для витрины с таблицами нужны три файла в sql/dm/:

  • <витрина>_scope.sql определяет, какие дни пересчитать;
  • <витрина>_rebuild.sql рассчитывает их и записывает в промежуточную таблицу;
  • <витрина>_replace.sql заменяет партицию одного дня в основной таблице.

Добавьте запуск расчета в dags/dm_transform.py, чтобы витрина обновлялась вместе с остальными. Для представления из задания 1 достаточно выполнить CREATE VIEW.

Образец этого порядка работы есть у готовой витрины revenue_daily. Ее таблицы, SQL-файлы и задача Airflow разобраны в справочнике DM. Состав колонок и выбор дней для пересчета берите из своего задания.

Выполнение SQL в DBeaver

В DBeaver создайте подключение по инструкции в README, но укажите пользователя etl и пароль из CLICKHOUSE_ETL_PASSWORD в .env. Пользователь analyst из той инструкции предназначен для чтения; у etl есть права создавать таблицы и представления в dm.

Создайте файл sql/ddl/70-labs.sql и сохраняйте в нем DDL своих витрин. Откройте его в SQL-редакторе этого подключения и выполните DDL текущего задания. Создавайте объекты с ON CLUSTER clickstream_cluster, чтобы они появились на обоих узлах; образец для представления — sql/ddl/60-dm-views.sql. Сохраненный файл позволит воссоздать ваши объекты при пересборке мира.

Проверка витрин

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

Проверка заново рассчитывает показатели по источнику и сравнивает их с вашей витриной. Строки сопоставляются по полям, которые их определяют: например, по дню и странице. FULL OUTER JOIN позволяет найти и разные значения, и строки, которых нет с одной стороны. INNER JOIN пропустил бы отсутствующие строки. Когда расхождений нет, задача становится зеленой.

homework_check не сохраняет результаты в сводку качества dm.dq_summary.

Запросы проверок лежат в sql/dq/. Откройте их после собственного решения: они заново рассчитывают показатели витрины, поэтому содержат ответ на существенную часть задания. Сравните свой способ расчета с готовым.

Задания по желанию

Полный список сюжетов — в разделе «Факультативы — пять разделов» программы.

Почему выручка не сходится

Открывается после ступени 1. Четыре расследования качества данных:

Первые три работы используют готовые данные. Четвертая продвигает мир через Airflow; для нее вы сохраняете состояния заказов после каждого модельного дня.

Данные о посетителях

Открывается после ступени 1.

Отчеты в Superset

Открывается после ступени 2. Два самостоятельных задания:

Загрузка и обновление данных

Открывается после ступени 1.

Удаление временных объектов

После опытов удаляйте свои временные объекты. Если удалили учебную витрину, ее задача в homework_check должна снова завершиться ошибкой: отсутствие витрины тоже проверяется. Подробнее — в справочнике проверок.