docs(handbook): раздел DDS главы о хранилище дополнен сессией и примером
- Зачем:
- ТЗ ступени 3 отправляет в главу за определением визита и доводом, почему
стенд считает сессии сам; раздел давал о сессии одно предложение.
- Что:
- в разделе «DDS: язык бизнеса» описаны договоренность о визите, роль
Метрики и эталон VisitID, session_id и чтение через dds.session_v.
- в «Посмотрите сами» добавлен запрос сессий дня между примерами ODS и DM,
итоговая фраза переписана на три запроса.
- Проверка:
- make lint; запрос к dds.session_v выполнен на стенде под analyst.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
1 parent
4c95dc3a5b
commit
e07484e9c2
1 file changed
+33
-7
@@ -48,9 +48,17 @@ DDS — детальный слой на языке бизнеса. Здесь
|
||||
карта идентичностей. Карта связывает посетителя, то есть куку `ClientID`, с
|
||||
пользователем магазина из заказа.
|
||||
|
||||
Сессия не приходит готовой из Kafka. Стенд сам выделяет ее из последовательных
|
||||
событий одного посетителя. Здесь собраны сущности, с которыми дальше работают
|
||||
аналитики.
|
||||
В стенде визитом считают подряд идущие события одной куки без пауз
|
||||
дольше 30 минут. Визит не пересекает границу модельных суток.
|
||||
Аналитик называет такой визит сессией.
|
||||
|
||||
В бою Метрика нарезает визиты сама и добавляет готовый `VisitID` в
|
||||
события. Стенд играет ее роль: считает сессии из событий заново, а `VisitID`
|
||||
оставляет эталоном для проверки. Иначе сборка сессий свелась бы к группировке
|
||||
по чужому полю, и учиться было бы не на чем. Идентификатор сессии
|
||||
`session_id` чеканит стенд: в событии его нет. Готовые сессии читайте через
|
||||
`dds.session_v`. В `dds.event_v` поля `VisitID` нет: так сессии можно собрать
|
||||
самому и сравнить с эталоном.
|
||||
|
||||
## DM: данные для дашбордов
|
||||
|
||||
@@ -95,7 +103,7 @@ DM — слой витрин. Витрина — готовый набор по
|
||||
|
||||
Подключитесь к ClickHouse по инструкции из разделов [«Адреса и
|
||||
пароли»](../../README.md#адреса-и-пароли) и [«Подключиться из
|
||||
DBeaver»](../../README.md#подключиться-из-dbeaver). В обоих примерах
|
||||
DBeaver»](../../README.md#подключиться-из-dbeaver). Во всех трех примерах
|
||||
`2026-06-01` — это D0, первый день [стартового
|
||||
мира](../../CONTEXT.md). Чтобы посмотреть другой день, замените
|
||||
эту дату в условии. Первый запрос покажет
|
||||
@@ -114,7 +122,25 @@ ORDER BY UTCEventTime
|
||||
LIMIT 20;
|
||||
```
|
||||
|
||||
Второй запрос покажет готовую выручку по категориям за тот же день:
|
||||
Второй запрос покажет сессии того же дня. Они рассчитаны из событий
|
||||
первого запроса:
|
||||
|
||||
```sql
|
||||
SELECT
|
||||
client_id,
|
||||
started_at,
|
||||
finished_at,
|
||||
events_total,
|
||||
pageviews,
|
||||
purchases,
|
||||
entry_url
|
||||
FROM dds.session_v
|
||||
WHERE session_date = '2026-06-01'
|
||||
ORDER BY events_total DESC
|
||||
LIMIT 20;
|
||||
```
|
||||
|
||||
Третий запрос покажет готовую выручку по категориям за тот же день:
|
||||
|
||||
```sql
|
||||
SELECT
|
||||
@@ -127,8 +153,8 @@ WHERE report_date = '2026-06-01'
|
||||
ORDER BY revenue DESC;
|
||||
```
|
||||
|
||||
Оба запроса читают поверхности `_v`. Первый показывает данные на языке
|
||||
источника, второй — готовый ответ витрины.
|
||||
Все три запроса читают поверхности `_v`. Первый показывает данные на языке
|
||||
источника, второй — расчетную сущность, третий — готовый ответ витрины.
|
||||
|
||||
## Куда дальше
|
||||
|
||||
|
||||
Reference in new issue
Block a user