Что отдаёт Яндекс как кликстрим: форма события и выгрузка #27

Closed
opened 2026-07-26 21:39:27 +03:00 by ddmitry · 1 comment
Owner

Part of #10

Question

Что отдаёт Яндекс как кликстрим и в какой форме — чтобы целевая модель
события стенда (#18) копировала формат, знакомый в РФ, а не абстрактный
Snowplow.

Подвопросы:

  • Метрика, Logs API (хиты и визиты): состав полей, типы, есть ли
    вложенность и массивы, какие метки времени (клиентская и серверная),
    идентификаторы (ClientID, UserID, метки рекламы). Как это обычно
    кладут в ClickHouse.
  • AppMetrica: форма события (похоже, полем-строкой с JSON), чем
    отличается от Метрики.
  • Способ доставки: батч-выгрузка или поток. Есть ли потоковый путь
    (Object Storage, Cloud Logging, «Стрим») — от этого зависит, честна ли
    наша Kafka в рассказе про Яндекс.
  • Выручка и заказы: как выражены покупка и сумма (ecommerce
    dataLayer), что из этого попадает в выгрузку.
  • Вывод для нас: плоское ядро с массивами или вложенный JSON; какие
    20–40 полей стоит воспроизводить, чтобы форма была узнаваема.

Источники — только первоисточники: документация Яндекс Метрики и
AppMetrica, документация Яндекс Облака. Итог — файлом в репозитории,
ссылка из тикета.

Тело восстановлено дословно из транскрипта сессии; перенос с GitHub 2026-07-26.

Part of #10 ## Question Что отдаёт Яндекс как кликстрим и в какой форме — чтобы целевая модель события стенда (#18) копировала формат, знакомый в РФ, а не абстрактный Snowplow. Подвопросы: - **Метрика, Logs API** (хиты и визиты): состав полей, типы, есть ли вложенность и массивы, какие метки времени (клиентская и серверная), идентификаторы (`ClientID`, `UserID`, метки рекламы). Как это обычно кладут в ClickHouse. - **AppMetrica**: форма события (похоже, полем-строкой с JSON), чем отличается от Метрики. - **Способ доставки**: батч-выгрузка или поток. Есть ли потоковый путь (Object Storage, Cloud Logging, «Стрим») — от этого зависит, честна ли наша Kafka в рассказе про Яндекс. - **Выручка и заказы**: как выражены покупка и сумма (ecommerce `dataLayer`), что из этого попадает в выгрузку. - **Вывод для нас**: плоское ядро с массивами или вложенный JSON; какие 20–40 полей стоит воспроизводить, чтобы форма была узнаваема. Источники — только первоисточники: документация Яндекс Метрики и AppMetrica, документация Яндекс Облака. Итог — файлом в репозитории, ссылка из тикета. *Тело восстановлено дословно из транскрипта сессии; перенос с GitHub 2026-07-26.*
ddmitry added the wayfinder:research label 2026-07-26 21:39:27 +03:00
Author
Owner

Резолюция (дословный перенос с GitHub, автор dementev-dev):

Ответ

Полный отчёт: docs/research/2026-07-26-yandex-clickstream-format.md — ветка
research/yandex-clickstream-format, коммит e6e34f2main не слита).

Форма — плоское широкое ядро с массивами. Вложенных объектов вроде
context / properties у Яндекса нет: около 140 плоских колонок на хит,
а всё многозначное (цели, товары, покупки, свои параметры) лежит в
параллельных массивах одной длины (productID, productName,
productPrice — три отдельных массива, а не массив объектов). Рядом одно
сырое поле-строка ecommerce. По форме Яндекс ближе к Snowplow, чем к
Segment или Amplitude.

Доставка — батч; потока в общем доступе нет.

  • Logs API: запрос готовится, потом скачивается TSV. Данных за текущий
    день нет, лог доформировывается около 3 дней. Период до года, квота
    10 ГБ.
  • «Метрика Про» плюс Yandex Data Transfer (репликация) в управляемый
    ClickHouse: задержка до 15 минут, истории до создания коннектора нет.
  • AppMetrica Data Stream: окна по 5 минут, задержка от 10 минут,
    хранение 7 дней.
  • Экспорт в Object Storage или Yandex Data Streams первоисточниками не
    подтверждён.

Вывод для стенда: Kafka — учебная замена, у Яндекса кликстрима через
Kafka нет. Так это и надо называть менти в документе о границах реализма.

Главные находки

  1. Две сущности: хиты (ym:pv:) и визиты (ym:s:). Визит — уже
    свёрнутая сессия, внутри watchIDs Array(UInt64).
  2. 56 полей хита — массивы. Идентификаторы числовые (watchID UInt64,
    clientID UInt64), не UUID.
  3. Строку user agent Метрика не отдаёт — только разобранные browser,
    browserMajorVersion, deviceCategory. Наш browser_user_agent
    выдумка стенда.
  4. Координат в выгрузке нет — только regionCountry / regionCity плюс
    числовые идентификаторы регионов. Наши широта и долгота тоже без
    аналога.
  5. Метка времени серверная одна (UTCEventTime) плюс смещение
    ClientTimeZone Int16 в минутах. Разделение «клиент против сервера»
    есть у AppMetrica (event_datetime / event_receive_datetime), у
    Метрики нет.
  6. В потоке приходят версии одной записи: Sign Int8,
    HitVersion / VisitVersion, считать через sum(Sign) — механика
    CollapsingMergeTree (подтверждено DDL visits_v1 из документации
    ClickHouse).
  7. Выручка — purchaseRevenue Array(Float64), валюта
    purchaseCurrency Array(String). В облачной выгрузке имена колонок
    без префиксов ym:*, уже в стиле ClickHouse (WatchID, VisitID,
    ClientID).

В файле дополнительно: таблица 53 полей с типами и источником и
пометкой «нет у нас» (главный пробел — цели, ParsedParams, ecommerce с
выручкой, Sign); 12 пунктов «что не копировать»; раздел с тем, что
осталось неподтверждённым (UserID и yclid в Logs API, лимит на размер
файла, срок хранения готового лога).

*Резолюция (дословный перенос с GitHub, автор dementev-dev):* ## Ответ Полный отчёт: `docs/research/2026-07-26-yandex-clickstream-format.md` — ветка `research/yandex-clickstream-format`, коммит `e6e34f2` (в `main` не слита). **Форма — плоское широкое ядро с массивами.** Вложенных объектов вроде `context` / `properties` у Яндекса нет: около 140 плоских колонок на хит, а всё многозначное (цели, товары, покупки, свои параметры) лежит в **параллельных массивах одной длины** (`productID`, `productName`, `productPrice` — три отдельных массива, а не массив объектов). Рядом одно сырое поле-строка `ecommerce`. По форме Яндекс ближе к Snowplow, чем к Segment или Amplitude. **Доставка — батч; потока в общем доступе нет.** - Logs API: запрос готовится, потом скачивается TSV. Данных за текущий день нет, лог доформировывается около 3 дней. Период до года, квота 10 ГБ. - «Метрика Про» плюс Yandex Data Transfer (репликация) в управляемый ClickHouse: задержка до 15 минут, истории до создания коннектора нет. - AppMetrica Data Stream: окна по 5 минут, задержка от 10 минут, хранение 7 дней. - Экспорт в Object Storage или Yandex Data Streams первоисточниками не подтверждён. Вывод для стенда: **Kafka — учебная замена**, у Яндекса кликстрима через Kafka нет. Так это и надо называть менти в документе о границах реализма. **Главные находки** 1. Две сущности: хиты (`ym:pv:`) и визиты (`ym:s:`). Визит — уже свёрнутая сессия, внутри `watchIDs Array(UInt64)`. 2. 56 полей хита — массивы. Идентификаторы числовые (`watchID UInt64`, `clientID UInt64`), не UUID. 3. Строку user agent Метрика не отдаёт — только разобранные `browser`, `browserMajorVersion`, `deviceCategory`. Наш `browser_user_agent` — выдумка стенда. 4. Координат в выгрузке нет — только `regionCountry` / `regionCity` плюс числовые идентификаторы регионов. Наши широта и долгота тоже без аналога. 5. Метка времени серверная одна (`UTCEventTime`) плюс смещение `ClientTimeZone Int16` в минутах. Разделение «клиент против сервера» есть у AppMetrica (`event_datetime` / `event_receive_datetime`), у Метрики нет. 6. В потоке приходят **версии одной записи**: `Sign Int8`, `HitVersion` / `VisitVersion`, считать через `sum(Sign)` — механика `CollapsingMergeTree` (подтверждено DDL `visits_v1` из документации ClickHouse). 7. Выручка — `purchaseRevenue Array(Float64)`, валюта `purchaseCurrency Array(String)`. В облачной выгрузке имена колонок без префиксов `ym:*`, уже в стиле ClickHouse (`WatchID`, `VisitID`, `ClientID`). **В файле дополнительно:** таблица 53 полей с типами и источником и пометкой «нет у нас» (главный пробел — цели, `ParsedParams`, ecommerce с выручкой, `Sign`); 12 пунктов «что не копировать»; раздел с тем, что осталось неподтверждённым (`UserID` и `yclid` в Logs API, лимит на размер файла, срок хранения готового лога).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ddmitry/clickstream-ch-kafka-superset-demo#27