- Зачем: начинающим трудно читать задания из-за необъясненных терминов и неестественных формулировок. - Что: переработаны вводная и 21 задание, названы темы разделов, объяснены термины и сокращены повторы; согласованы правила учебного текста и ссылки. - Проверка: сохранены 25 блоков SQL и команд и таблицы состава колонок; проверены 153 локальные ссылки и 32 входящие ссылки на разделы; git diff --check прошел.
7.1 KiB
Задание 1: события для анализа, dm.events_enriched_v
Вы подготовите представление с полями для анализа событий. Оно будет добавлять вычисляемые поля при чтении, сохраняя одну строку на событие.
Подготовка
- «Хранилище и его слои».
- Выполнение SQL в DBeaver: файл для решения и подключение с правами на создание витрины.
Данные для анализа событий
В 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. У события с тремя
позициями получится три строки вместо одной.
Главная опасность — потеря событий с пустым массивом товаров: ARRAY JOIN
исключает их из результата. Товары есть только в событиях корзины и покупки.
Поэтому исчезнет большинство событий — девятнадцать строк из двадцати.
Запрос выполнится без ошибки, а витрина по имени и составу колонок
по-прежнему будет выглядеть таблицей событий.
Сохраните массивы как в источнике. Для анализа отдельных товарных позиций нужна отдельная витрина, где одна строка соответствует товарной позиции.
Проверка результата
После применения DDL откройте Airflow по адресу из README,
найдите даг homework_check и запустите его вручную. В новом запуске откройте
задачу events_enriched: она должна завершиться успешно. Если задача
красная, откройте ее журнал (Logs) — там будет причина ошибки, а при
расхождениях с источником — дни и примеры несовпадений. Задачи еще не
созданных витрин будут красными; это ожидаемо и не мешает проверке первой.
Выберите день и прочитайте его события из dds.event_v и своей витрины.
Сопоставьте строки по event_id через FULL OUTER JOIN.
Найдите события, которые есть только с одной стороны, и события, у которых
различаются перенесенные из источника поля. Расхождений должно быть ноль.
Отдельно сверьте event_hour, page_path и referer_host с теми же
выражениями, рассчитанными прямо по dds.event_v.
Результат работы
- у вас есть
dm.events_enriched_vс явно перечисленными колонками; - вы сверили число строк и набор
event_idсdds.event_vза каждый прожитый день; расхождений нет; - проверка
events_enrichedвhomework_checkпрошла успешно; - витрина работает без физической таблицы и задачи в
dm_transform.