Merge pull request 'docs(labs): ТЗ ступени 3 «Нарежь сессии сам»' (#233) from 232-lab-sessions into main
Reviewed-on: #233
This commit was merged in pull request #233.
This commit is contained in:
commit
4c95dc3a5b
2 files changed
+91
-2
No files matched your search
@@ -0,0 +1,89 @@
|
|||||||
|
# Нарежь сессии сам
|
||||||
|
|
||||||
|
**Чему учит:** собрать сессии из событий и сверить их число с внешним
|
||||||
|
эталоном. Найти причину расхождения в отдельных строках.
|
||||||
|
|
||||||
|
## Сначала прочитать
|
||||||
|
|
||||||
|
- [Хранилище и его слои, раздел DDS](../handbook/storage-layers.md#dds-язык-бизнеса);
|
||||||
|
- [формат события: Идентификаторы и время](../formats/clickstream-event.md#идентификаторы-и-время).
|
||||||
|
|
||||||
|
## Роль сессии
|
||||||
|
|
||||||
|
Визит, или сессия, объединяет действия посетителя за один заход на сайт.
|
||||||
|
По визитам аналитик считает длительность и глубину просмотра.
|
||||||
|
В хранилище сессии собираются из отдельных событий.
|
||||||
|
Сверьте самостоятельный расчет с `VisitID`, чтобы увидеть, как из событий
|
||||||
|
получается сессия.
|
||||||
|
|
||||||
|
## Что сделать
|
||||||
|
|
||||||
|
### Нарезка
|
||||||
|
|
||||||
|
В SQL Lab или DBeaver под `analyst` напишите запрос к `ods.event_v`.
|
||||||
|
Для своей нарезки и эталона возьмите одни и те же строки за все доступные
|
||||||
|
дни: для расследования понадобятся события соседних дней.
|
||||||
|
Выберите `ClientID`, `UTCEventTime`, `EventDate`, `EventType` и `VisitID`.
|
||||||
|
В `dds.event_v` эталонного `VisitID` нет.
|
||||||
|
|
||||||
|
Для начала считайте визитом последовательные события одной куки (`ClientID`);
|
||||||
|
пауза дольше 30 минут открывает новый визит.
|
||||||
|
Учитывайте события всех типов. Упорядочите их по `UTCEventTime`.
|
||||||
|
Присвойте каждому событию номер своей сессии внутри куки.
|
||||||
|
Подсказка: оконные функции.
|
||||||
|
|
||||||
|
Днем сессии считайте `EventDate` ее первого события: дата из `UTCEventTime`
|
||||||
|
отличается от `EventDate` для части событий, поэтому берите `EventDate`.
|
||||||
|
При сверке останутся расхождения из-за еще одной договоренности стенда.
|
||||||
|
|
||||||
|
### Сверка с эталоном
|
||||||
|
|
||||||
|
В эталоне посчитайте число визитов каждой куки за модельный день:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT ClientID, EventDate, uniqExact(VisitID) AS reference_sessions
|
||||||
|
FROM ods.event_v
|
||||||
|
GROUP BY ClientID, EventDate
|
||||||
|
ORDER BY EventDate, ClientID;
|
||||||
|
```
|
||||||
|
|
||||||
|
Посчитайте свои сессии по куке и дню сессии.
|
||||||
|
Соедините два готовых агрегата через `FULL OUTER JOIN` по куке и дню.
|
||||||
|
В результате полного соединения останутся ключи обеих сторон: при расхождении
|
||||||
|
на вашей стороне ключа может не быть совсем. Учтите такие строки при сравнении.
|
||||||
|
Выведите сводку по дням с числом разошедшихся кук и список этих кук
|
||||||
|
с днем и обоими значениями счета. Общая сумма за день могла бы скрыть
|
||||||
|
взаимную компенсацию ошибок разных кук. По списку видно, у кого искать причину.
|
||||||
|
|
||||||
|
Расхождений будет всего несколько. Если их нет, мир прожил мало дней.
|
||||||
|
Прогоните несколько дней через [даги модельного времени](../handbook/airflow-dags.md#даги-мира)
|
||||||
|
и повторите сверку.
|
||||||
|
|
||||||
|
### Расследование
|
||||||
|
|
||||||
|
Выберите одну разошедшуюся куку. Выведите ее события за два соседних дня
|
||||||
|
с `UTCEventTime`, `EventDate`, `VisitID` и номером своей сессии.
|
||||||
|
Сопоставьте сессии через события: общего ключа у двух нарезок нет,
|
||||||
|
зато у каждого события есть и `VisitID`, и присвоенный вами номер.
|
||||||
|
Найдите два соседних события, между которыми границы визитов разошлись.
|
||||||
|
Запишите куку, день, время обоих событий и причину одним предложением.
|
||||||
|
Уточните определение визита и добейтесь нуля расхождений во всех днях.
|
||||||
|
|
||||||
|
## Как проверить себя
|
||||||
|
|
||||||
|
Результат задания проверяется глазами, поэтому задачи в `homework_check`
|
||||||
|
для него нет. Таблицы и представления создавать не нужно.
|
||||||
|
Сохраните исходный и уточненный расчеты, результаты сверки и найденные строки.
|
||||||
|
|
||||||
|
**Предупреждение.** В `sql/dds/session_rebuild.sql` и
|
||||||
|
`sql/dq/sessions_vs_reference.sql` лежат готовые запросы нарезки и сверки.
|
||||||
|
Откройте их после собственного решения и расследования. Сравните запросы
|
||||||
|
со своими: копирование готового SQL пропускает расследование.
|
||||||
|
Сопоставление со стендовой нарезкой по `session_id` остается на ступень 4.
|
||||||
|
|
||||||
|
## Приемка
|
||||||
|
|
||||||
|
- [ ] запрос нарезает все события `ods.event_v` за все доступные дни;
|
||||||
|
- [ ] сверка через `FULL OUTER JOIN` дает сводку по дням и список кук;
|
||||||
|
- [ ] при разборе расхождения указаны кука, день, два события и причина;
|
||||||
|
- [ ] уточненный расчет дает ноль расхождений во всех днях.
|
||||||
+2
-2
@@ -10,13 +10,13 @@
|
|||||||
|---|---|---|
|
|---|---|---|
|
||||||
| 1 | Пять витрин слоя DM | построить результат для потребителя хранилища; уроки каждой витрины — в таблице ниже |
|
| 1 | Пять витрин слоя DM | построить результат для потребителя хранилища; уроки каждой витрины — в таблице ниже |
|
||||||
| 2 | [Свой график в Superset](2-1-superset-chart.md) | превратить свой результат из хранилища в отчет в BI |
|
| 2 | [Свой график в Superset](2-1-superset-chart.md) | превратить свой результат из хранилища в отчет в BI |
|
||||||
| 3 | Нарежь сессии сам | сравнить свою нарезку визитов с эталоном по числу сессий и найти причину расхождения в отдельных событиях |
|
| 3 | [Нарежь сессии сам](3-1-sessions-by-hand.md) | сверить число сессий в своей нарезке с эталоном и найти события, из-за которых оно расходится |
|
||||||
| 4 | Перепиши нарезку стенда | изменить расчетную сущность внутри готового конвейера и проверить ее внешним эталоном |
|
| 4 | Перепиши нарезку стенда | изменить расчетную сущность внутри готового конвейера и проверить ее внешним эталоном |
|
||||||
| 5 | Сначала сторож, потом ломай: заказы | написать проверки качества до рискованного изменения, а не после первой поломки |
|
| 5 | Сначала сторож, потом ломай: заказы | написать проверки качества до рискованного изменения, а не после первой поломки |
|
||||||
| 6 | Разбери сырые события и сверь результат со стендом | изучить разбор потока отдельно от живого приема и сверить его со стендовым результатом |
|
| 6 | Разбери сырые события и сверь результат со стендом | изучить разбор потока отдельно от живого приема и сверить его со стендовым результатом |
|
||||||
| 7 | Мониторинг: куда смотреть | выбрать, куда и на что смотреть в живой системе |
|
| 7 | Мониторинг: куда смотреть | выбрать, куда и на что смотреть в живой системе |
|
||||||
|
|
||||||
ТЗ для ступеней 3–7 появятся по мере продвижения программы.
|
ТЗ для ступеней 4-7 появятся по мере продвижения программы.
|
||||||
|
|
||||||
## Ступень 1: пять витрин слоя DM
|
## Ступень 1: пять витрин слоя DM
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user