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

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

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

6.4 KiB
Raw Permalink Blame History

Сессии из событий

Вы самостоятельно объедините события сайта в сессии и сравните их число с готовыми визитами источника, обозначенными VisitID. Затем найдете события, из-за которых расчеты расходятся.

Подготовка

События и визиты

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

Расчет сессий

Границы визитов

В SQL Lab или DBeaver под analyst напишите запрос к ods.event_v. Для своего расчета и эталона возьмите одни и те же строки за все доступные дни: для расследования понадобятся события соседних дней. Выберите ClientID, UTCEventTime, EventDate, EventType и VisitID. В dds.event_v эталонного VisitID нет.

ClientID хранится в cookie браузера и обозначает посетителя в событиях сайта. Для начала считайте визитом последовательные события одного ClientID: пауза дольше 30 минут открывает новый визит. Учитывайте события всех типов. Упорядочите их по UTCEventTime. Присвойте каждому событию номер своей сессии внутри ClientID. Подсказка: оконные функции.

Днем сессии считайте EventDate ее первого события: дата из UTCEventTime отличается от EventDate для части событий, поэтому берите EventDate. При сверке останутся расхождения из-за еще одной договоренности стенда.

Сверка с эталоном

Посчитайте по эталонному VisitID число визитов каждого ClientID за модельный день:

SELECT ClientID, EventDate, uniqExact(VisitID) AS reference_sessions
FROM ods.event_v
GROUP BY ClientID, EventDate
ORDER BY EventDate, ClientID;

Посчитайте свои сессии по ClientID и дню сессии. Соедините результаты двух расчетов через FULL OUTER JOIN по этим полям. Учтите строки, которые есть только с одной стороны: полное соединение сохранит их в результате.

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

Расхождений будет всего несколько. Если их нет, мир прожил мало дней. Прогоните несколько дней через даги модельного времени и повторите сверку.

Поиск причины расхождения

Выберите один ClientID с расхождением. Выведите его события за два соседних дня с UTCEventTime, EventDate, VisitID и номером своей сессии. Сопоставьте сессии через события: общего ключа у двух расчетов нет, зато у каждого события есть и VisitID, и присвоенный вами номер. Найдите два соседних события, между которыми границы визитов разошлись. Запишите ClientID, день, время обоих событий и причину одним предложением. Уточните определение визита и добейтесь нуля расхождений во всех днях.

Проверка результата

Сохраните исходный и уточненный расчеты, результаты сверки и найденные строки. Таблицы и представления создавать не нужно. Задачи в homework_check для этого задания нет: вы проверяете расчет своим запросом.

В sql/dds/session_rebuild.sql и sql/dq/sessions_vs_reference.sql лежат готовые запросы расчета сессий и сверки. Откройте их после собственного решения и расследования. Сравните запросы со своими. На ступени 4 вы сравните свой результат с готовыми сессиями стенда по session_id.

Результат работы

  • ваш запрос собирает сессии из всех событий ods.event_v за все доступные дни;
  • у вас есть сводка расхождений по дням и список ClientID, полученные через FULL OUTER JOIN;
  • вы объяснили причину одного расхождения и записали ClientID, день и два события, на которых оно видно;
  • уточненный расчет дает ноль расхождений во всех днях.