Files
clickstream-data-platform/docs/labs/events-enriched.md
T
ddadminandClaude Fable 5.1 29a01f0016 docs(labs): переписана проза пяти ТЗ ступени 1 и раздел «Как принято»
- Зачем:
  - владелец при чтении забраковал прозу ТЗ ступени 1: образы вместо
    утверждений, заголовки-метафоры, договоренности стенда поданы как
    законы. Тикет #228.
- Что:
  - пять ТЗ (задания 1–5) написаны заново по форме ТЗ ступени 2:
    содержание, колонки, формулы, самопроверка и приемка сохранены.
  - раздел README лаб «Общие правила ступени 1» переименован в «Как принято
    на ступени 1» и переписан как выбор с доводом; точечно поправлены
    «Самопроверка» и таблица ступени 1.
- Проверка:
  - grep по «ё», «менти», формам «ты» и словам-законам по docs/labs/*.md
    молчит (единственное «правило» — в нетронутом разделе «Уборка»).
  - скрипт ссылок и якорей из #226 печатает пусто; git diff --check чист.
  - сверка имен в обратных кавычках и чекбоксов старых и новых файлов —
    без расхождений.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-06 08:44:27 -04:00

6.5 KiB
Raw Blame History

Задание 1: dm.events_enriched_v

Чему учит: строить слой как договор о данных, а не как их копию. Оставлять витрину представлением, если зерно источника не меняется.

Сначала прочитать

Роль витрины

В dds.event_v 44 колонки, включая технические поля источника и массивы товаров. Для анализа событий в Superset нужны деловые поля и три готовых значения: час события, путь страницы и домен перехода. Тогда вам не придется повторять эти выражения в каждом запросе.

Витрины следующих заданий читают DDS напрямую. Использовать dm.events_enriched_v как источник для них не нужно: задания независимы, их можно выполнять в любом порядке.

Что сделать

Создайте обычное представление CREATE VIEW dm.events_enriched_v. Единственный источник — dds.event_v. Зерно — событие: каждой строке источника соответствует одна строка витрины.

Физическая таблица, таблица-донор и задача в dm_transform не нужны. Представление не хранит строки, поэтому ключ шардирования и пересборка ему не требуются.

Укажите колонки явно. Иначе новая колонка источника попадет в витрину автоматически, и договор с потребителем изменится без вашего участия.

Группа Колонки
Время и посетитель event_date, event_time, event_hour, client_id, event_id
Действие event_type (pageview, add_to_cart, purchase), url, page_path, referer, referer_host, title
UTM-метки utm_source, utm_medium, utm_campaign, utm_content, utm_term
Устройство и регион device_category, browser, operating_system, region_country, region_city
Товары и покупка product_id, product_name, product_category, product_price, product_quantity, product_event_type, purchase_id, purchase_revenue, purchase_coupon

Три колонки вычислите в представлении. Остальные возьмите из источника без изменений, сохранив массивы product_*.

Колонка Как считается Для чего нужна
event_hour toHour(event_time) Анализ событий по часам суток
page_path путь url без домена и параметров Группировка по странице
referer_host домен referer Анализ источников перехода

Не добавляйте _load_id и _load_ts. Их нет и у dds.event_v: события в DDS читают из ODS без отдельной загрузки. Эти служебные поля указывают на запуск, который записал строку на диск. Представление ничего не загружает.

Типичная ошибка

Не разворачивайте массивы товаров через ARRAY JOIN. У события с тремя позициями получится три строки. Зерно изменится. Витрину с новым зерном на стенде хранят готовым агрегатом — причины описаны в разделе «Как принято на ступени 1».

Главная опасность — потеря событий с пустым массивом товаров: ARRAY JOIN исключает их из результата. Товары есть только в событиях корзины и покупки. Поэтому исчезнет большинство событий — девятнадцать строк из двадцати. Запрос выполнится без ошибки, а витрина по имени и составу колонок по-прежнему будет выглядеть таблицей событий.

Сохраните массивы как в источнике. Для анализа отдельных товарных позиций нужна другая витрина с другим зерном и именем.

Как проверить себя

Деловой ключ — event_id внутри дня. Получите результат прямо из dds.event_v за тот же день. Соедините его с витриной полным внешним соединением по event_id. Посчитайте строки, где ключ отсутствует с одной из сторон или различаются значения деловых колонок. Расхождений должно быть ноль.

Отдельно сверьте event_hour, page_path и referer_host с теми же выражениями, рассчитанными прямо по dds.event_v.

Если строк в витрине в разы меньше, чем в источнике, и остались только события корзины и покупки, это признак развернутых массивов: ARRAY JOIN исключил все события с пустым массивом товаров.

Приемка

  • представление dm.events_enriched_v создано без физических таблиц;
  • список колонок в представлении задан явно;
  • число строк и набор event_id совпадают с dds.event_v за каждый прожитый день;
  • задача events_enriched в homework_check завершилась успешно;
  • задачи для этой витрины в dm_transform нет.