From a03838b95305e84d4fdfc75ce75586de7d153487 Mon Sep 17 00:00:00 2001 From: Dmitry Dementev Date: Sun, 13 Sep 2026 10:34:48 -0400 Subject: [PATCH] =?UTF-8?q?docs(labs):=20=D0=BE=D1=84=D0=BE=D1=80=D0=BC?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D1=84=D0=B0=D0=BA=D1=83=D0=BB=D1=8C=D1=82?= =?UTF-8?q?=D0=B0=D1=82=D0=B8=D0=B2=D0=BD=D1=8B=D0=B9=20=D1=80=D0=B0=D0=B7?= =?UTF-8?q?=D0=B4=D0=B5=D0=BB=20Superset=20=D0=B8=20BI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Зачем: дать менти два самостоятельных задания по BI после ступени 2. Что: обновлено ТЗ дашборда, добавлен опыт с объектом на одной ноде, уточнены программа и индекс. Формулировки обращены к учащемуся. Проверка: локальные ссылки и git diff --check прошли. На ClickHouse 26.3.17.56 воспроизведены ошибка чтения со второй ноды и исправление; учебный объект удален. Полный проход через интерфейс Superset не выполнялся. --- docs/labs/README.md | 9 ++- docs/labs/optional/superset-dashboard.md | 61 +++++++++++----- docs/labs/optional/superset-missing-object.md | 70 +++++++++++++++++++ docs/specs/2026-09-01-labs-program.md | 22 ++++-- 4 files changed, 136 insertions(+), 26 deletions(-) create mode 100644 docs/labs/optional/superset-missing-object.md diff --git a/docs/labs/README.md b/docs/labs/README.md index ca355ba..0ca33ee 100644 --- a/docs/labs/README.md +++ b/docs/labs/README.md @@ -138,9 +138,12 @@ DM](../architecture/dm.md). ### Superset и BI -Открывается после ступени 2. В задании -[Свой дашборд в Superset](optional/superset-dashboard.md) вы собираете -отдельный дашборд, не меняя объекты стенда. +Открывается после ступени 2. Два самостоятельных задания: + +- [Свой дашборд в Superset](optional/superset-dashboard.md): собрать отчет + из своих витрин и подтвердить выводы запросами. +- [В DBeaver работает, в Superset нет](optional/superset-missing-object.md): + выяснить, почему клиенты по-разному видят один объект хранилища. ### Инженерия стенда diff --git a/docs/labs/optional/superset-dashboard.md b/docs/labs/optional/superset-dashboard.md index c488cbb..48c042e 100644 --- a/docs/labs/optional/superset-dashboard.md +++ b/docs/labs/optional/superset-dashboard.md @@ -1,13 +1,12 @@ # Свой дашборд в Superset -**Чему учит:** довести свои витрины до потребителя — завести в Superset -датасеты поверх публичных представлений, подобрать графики под вопросы и -собрать из них один связный экран. +**Чему учит:** собрать из своих витрин отчет о поведении посетителей, +подобрать графики под вопросы и разместить их на одном понятном экране. Это факультатив раздела «Superset и BI». Его можно пройти после ступени 2, когда готовы витрины ступени 1. -## Роль дашборда +## На какие вопросы ответит дашборд Соберите обзор трафика и поведения посетителей. Он должен отвечать на три вопроса: что происходило в магазине, какие страницы, устройства и рекламные @@ -26,14 +25,17 @@ таких объектов описан в [доке Superset](../../architecture/superset.md), «Импорт при каждой инициализации». -Заведите отдельные датасеты и графики, соберите из них свой дашборд. +Используйте свои датасеты и графики, соберите из них свой дашборд. Назовите его, например, «Мои витрины DM». Это то же правило, по которому DDL домашек лежит в `sql/ddl/70-labs.sql`: стендовые объекты уже есть, свои создаете вы. ## Датасеты -Заведите в подключении `ClickHouse` пять физических датасетов схемы `dm`: +Датасет `session_overview_v`, его метрика доли отказов и график уже готовы +после [ступени 2](../2-1-superset-chart.md). Используйте их здесь. Добавьте +недостающие датасеты, чтобы в подключении `ClickHouse` были представлены +пять публичных представлений схемы `dm`: - `events_enriched_v`; - `top_pages_daily_v`; @@ -56,14 +58,25 @@ Для долей используйте слагаемые из витрин. Например, доля отказов считается как сумма `bounce_sessions`, деленная на сумму `sessions`. Среднее по готовым -долям для такого графика не подходит — урок задания 3 остается в силе. +долям для такого графика не подходит. Названия графиков, осей и показателей должны объяснять экран без чтения SQL. +## Период отчета + +Выберите явный период из модельного календаря и задайте его в графиках +поведения посетителей. Последнюю доступную дату посмотрите в своих витринах. +Относительный период вроде `Last week` отсчитывается от настоящего времени +и может дать пустой экран. + +Ошибки приема считаются по `load_date`, дню загрузки, а поведение посетителей +по модельному времени. Для панели ошибок выберите период загрузки отдельно +и укажите его в подписи. Общий фильтр времени для всего дашборда не требуется. + ## Как проверить себя -Эта лаба проверяется глазами. У расположения панелей и понятных подписей нет -счетного инварианта, поэтому задачи для нее в `homework_check` нет. +Автоматической проверки этого задания нет. Числа вы сверите запросами, +а понятность графиков проверите по подписям. Откройте список дашбордов и проверьте: @@ -75,14 +88,26 @@ серверную; - пустой график ошибок нормален, если в таблицах брака сейчас нет строк. -Последний проход сделайте как читатель: найдите на экране самый заметный -канал, страницу и устройство, затем проверьте, понятно ли из подписей, что -именно сравнивается. Если ответ приходится угадывать, поправьте график или -его название. +По готовому экрану запишите три коротких вывода за выбранный период: -## Приемка +- какой рекламный канал дал больше покупок; +- какая страница получила больше просмотров; +- у какой категории устройств выше доля отказов. -- [ ] пять датасетов читают публичные представления витрин заданий 1–5; -- [ ] создан отдельный дашборд, стендовые объекты не изменены; -- [ ] каждая витрина представлена хотя бы одним графиком; -- [ ] дашборд проверен глазами по разделу выше. +Для каждого вывода укажите период и число, на которое опираетесь. Проверьте +его запросом к своей витрине в SQL Lab с тем же периодом и способом расчета. +Сохраните запросы рядом с выводами. При равенстве значений назовите всех +лидеров. Если данных нет, это тоже результат: подтвердите отсутствие строк +запросом. + +Проверьте, можно ли найти эти ответы по одним подписям графиков. Если есть +возможность, попросите другого человека прочитать экран без ваших пояснений. + +## Что должно получиться + +- [ ] у вас есть пять датасетов поверх публичных представлений витрин заданий 1–5; +- [ ] вы собрали свой дашборд, сохранив стендовые объекты без изменений; +- [ ] на дашборде есть хотя бы один график от каждой витрины; +- [ ] вы проверили, что графики и подписи понятны по вопросам из раздела выше; +- [ ] вы записали три вывода и сверили числа с SQL; в отчете указаны периоды + поведения посетителей и ошибок приема. diff --git a/docs/labs/optional/superset-missing-object.md b/docs/labs/optional/superset-missing-object.md new file mode 100644 index 0000000..aff842e --- /dev/null +++ b/docs/labs/optional/superset-missing-object.md @@ -0,0 +1,70 @@ +# В DBeaver работает, в Superset нет + +**Чему учит:** найти причину, по которой один клиент читает объект +хранилища, а другой его не видит. + +Факультатив доступен после [ступени 2](../2-1-superset-chart.md). +Свой дашборд для опыта не нужен. Используйте готовую витрину стенда +`dm.daily_traffic_v`. + +## Подготовьте опыт + +В DBeaver подключитесь к первой ноде пользователем `etl`, как описано +в разделе [«Как применить свой DDL»](../README.md#как-применить-свой-ddl). +Для опыта создайте отдельное представление: + +```sql +CREATE VIEW dm.bi_node_probe_v AS +SELECT * FROM dm.daily_traffic_v; +``` + +Запрос выполнится успешно. Теперь проверьте, откуда можно прочитать +созданное представление. Начните с того же подключения: + +```sql +SELECT count() FROM dm.bi_node_probe_v; +``` + +Повторите запрос в SQL Lab Superset, выбрав подключение `ClickHouse`. +Сохраните текст ошибки. + +## Найдите причину + +Выясните, к каким серверам обращаются DBeaver и Superset. Адреса подключения +показывают настройки клиентов, а имя ответившего сервера можно спросить +запросом `SELECT hostName()`. + +Проверьте наличие `dm.bi_node_probe_v` на обеих нодах. Для второй ноды +заведите подключение DBeaver с портом из +[README](../../../README.md#подключиться-из-dbeaver). Запишите, где объект +есть, и объясните, почему успешного создания в первом подключении оказалось +недостаточно. + +Исправьте DDL так, чтобы представление появилось на обеих нодах. Подключение +Superset должно остаться прежним. Сохраните исправленный DDL и повторите +исходный запрос в обоих клиентах. + +Если застряли, прочитайте раздел «Устройство зоны» в +[справочнике Superset](../../architecture/superset.md#устройство-зоны) и +[описание распределенного DDL ClickHouse](https://clickhouse.com/docs/reference/statements/distributed-ddl). + +## Как проверить себя + +В обоих клиентах запрос к вашему представлению должен вернуть столько же +строк, сколько `SELECT count() FROM dm.daily_traffic_v`. Сравнивайте результаты +при завершенном прогоне конвейера, пока мир не продвигается. + +Объясните причину ошибки через три факта: куда пришел DDL, куда пришел +запрос Superset и на каких нодах существовало представление. + +После опыта удалите только `dm.bi_node_probe_v` на обеих нодах. Не включайте +его в постоянный DDL домашних витрин: это временный объект расследования. + +## Что должно получиться + +- [ ] у вас сохранены успешный запрос из DBeaver и ошибка из SQL Lab; +- [ ] вы можете объяснить, к каким серверам подключены клиенты, где было + создано представление и почему Superset его не видел; +- [ ] у вас есть исправленный DDL; оба клиента возвращают столько же строк, + сколько исходная витрина; +- [ ] после опыта вы удалили учебное представление с обеих нод. diff --git a/docs/specs/2026-09-01-labs-program.md b/docs/specs/2026-09-01-labs-program.md index 424b87d..a0bb100 100644 --- a/docs/specs/2026-09-01-labs-program.md +++ b/docs/specs/2026-09-01-labs-program.md @@ -171,11 +171,23 @@ Открывается после ступени 2 основной программы. -- **Свой дашборд.** Готовая лаба - [`docs/labs/optional/superset-dashboard.md`](../labs/optional/superset-dashboard.md) учит - хранить пользовательские объекты отдельно от стендовых. -- **Почему дашборд не видит объект на второй ноде.** Забытый `ON CLUSTER` может - остаться незаметным до тех пор, пока дашборд не обратится ко второй ноде. +- **[Свой дашборд](../labs/optional/superset-dashboard.md).** Менти использует + результат ступени 2, собирает отчет из пяти своих витрин и подтверждает + выводы запросами. Пользовательские объекты остаются отдельно от стендовых. +- **[В DBeaver работает, в Superset нет](../labs/optional/superset-missing-object.md).** + Менти создает отдельное представление на первой ноде и расследует ошибку + чтения из Superset, подключенного ко второй. Опыт заканчивается объяснением, + исправлением DDL и удалением учебного объекта. + +Задания самостоятельны: расследование использует готовую витрину стенда. +Отсутствие объекта проверяется в SQL Lab, поскольку создание физического +датасета может остановиться раньше, чем появится график. Чтение только одного +шарда остается материалом инженерного раздела: это отдельная причина +неполного результата, которую добавление `ON CLUSTER` само по себе не устраняет. + +Технический опыт проверен 2026-09-13 на ClickHouse 26.3.17.56: локальное +представление недоступно пользователю `bi` на второй ноде; после создания +на кластере обе ноды возвращают тот же счет, что исходная витрина. ### Инженерия стенда