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

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

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

96 lines
6.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Сессии из событий
Вы самостоятельно объедините события сайта в сессии и сравните их число
с готовыми визитами источника, обозначенными `VisitID`. Затем найдете
события, из-за которых расчеты расходятся.
## Подготовка
- [Хранилище и его слои, раздел DDS](../handbook/storage-layers.md#dds-события-заказы-и-сессии);
- [формат события: Идентификаторы и время](../formats/clickstream-event.md#идентификаторы-и-время).
## События и визиты
Визит, или сессия, объединяет действия посетителя за один заход на сайт.
По визитам аналитик считает длительность и глубину просмотра.
В хранилище сессии собираются из отдельных событий.
## Расчет сессий
### Границы визитов
В 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`
за модельный день:
```sql
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`, для которых расчеты разошлись,
и список этих идентификаторов с днем и обоими значениями. Общая сумма за день
могла бы скрыть ошибки: для одного посетителя вы посчитали лишнюю сессию,
для другого пропустили. По списку видно, чьи события нужно исследовать.
Расхождений будет всего несколько. Если их нет, мир прожил мало дней.
Прогоните несколько дней через [даги модельного времени](../handbook/airflow-dags.md#генерация-модельных-дней)
и повторите сверку.
### Поиск причины расхождения
Выберите один `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`, день и два
события, на которых оно видно;
- [ ] уточненный расчет дает ноль расхождений во всех днях.