Контракт dds.event_v: атрибуты бизнес-модели #132

Closed
opened 2026-08-22 10:26:32 +03:00 by ddmitry · 2 comments
Owner

Part of #127.

Вопрос

Состав контракта dds.event_v: имена атрибутов модели (snake_case — имя
атрибута модели, не нормализованное имя источника, см. CONTEXT.md),
какие коды расшифровываются (DeviceCategory назван спекой — что ещё),
что скрывается, и форма объекта — представление или материализация — по
итогам research-тикета о проталкивании условий.

Витрины DM читают dds.event_v, а не ODS напрямую: это первый пример
правила «слой — это контракт, а не обязательно копия данных» (спека §7).

Сначала прочитать

  • мастер-спека, раздел 7 (абзац о двух контрактах ods.event_v и
    dds.event_v) и раздел 1.1 (решения по именам и типам);
  • CONTEXT.md: «Нормализованное имя», «Хранилище»;
  • docs/formats/clickstream-event.md — состав колонок источника.
Part of #127. ## Вопрос Состав контракта `dds.event_v`: имена атрибутов модели (snake_case — имя атрибута модели, не нормализованное имя источника, см. CONTEXT.md), какие коды расшифровываются (`DeviceCategory` назван спекой — что ещё), что скрывается, и форма объекта — представление или материализация — по итогам research-тикета о проталкивании условий. Витрины DM читают `dds.event_v`, а не ODS напрямую: это первый пример правила «слой — это контракт, а не обязательно копия данных» (спека §7). ## Сначала прочитать - мастер-спека, раздел 7 (абзац о двух контрактах `ods.event_v` и `dds.event_v`) и раздел 1.1 (решения по именам и типам); - `CONTEXT.md`: «Нормализованное имя», «Хранилище»; - `docs/formats/clickstream-event.md` — состав колонок источника.
ddmitry added the wayfinder:grilling label 2026-08-22 10:26:35 +03:00
ddmitry added a new dependency 2026-08-22 10:27:11 +03:00
Author
Owner

Зацепка из резолюции #131: счётной DQ-сверке сессий с эталоном нужен VisitID, а сборке самих сессий — нет. Решите его судьбу в контракте явно: либо dds.event_v его отдаёт, либо сверка ходит за ним в ODS. Контекст — docs/architecture/dds/session.md, раздел «Сверка с эталоном».

Зацепка из резолюции #131: счётной DQ-сверке сессий с эталоном нужен VisitID, а сборке самих сессий — нет. Решите его судьбу в контракте явно: либо dds.event_v его отдаёт, либо сверка ходит за ним в ODS. Контекст — docs/architecture/dds/session.md, раздел «Сверка с эталоном».
ddmitry self-assigned this 2026-08-24 20:44:21 +03:00
Author
Owner

Резолюция

Форма — обычное представление над ods.event_v, вторым уровнем: FINAL спрятан в один слой, условия доезжают до индексов (research #128). Оговорки соблюдены: event_date — переименованием, не пересчётом; цена FINAL (без авто-PREWHERE) — свойство ODS.

Язык модели — имена атрибутов модели, не нормализованные имена источника. Расхождения: WatchID → event_id; UTCEventTime → event_time в поясе счётчика (Europe/Samara), второй метки времени нет — UTC остаётся языком ODS; EventDate → event_date. ClientID остаётся client_id (устоявшееся имя куки, шардирование, мост к identity_map).

Расшифровки — только device_category: коды 1–4 в desktop / mobile / tablet / tv (у Метрики атрибут и есть строка). Регионы не расшифровываются — названия уже едут рядом с id; идея лабы «справочник регионов руками менти» — #143.

Скрыто — VisitID (чужой суррогат сессии; DQ-сверка идёт за эталоном в ods.event_v — решение владельца: опыт показательнее), Sign (колонка формата без механики), ecommerce (сырьё, разобранные массивы в контракте есть), _load_id/_load_ts (у представления нет собственной загрузки). Остальные ~40 колонок отдаются целиком.

Дока с отклонёнными вариантами: docs/architecture/dds/event.md (PR #144).

## Резолюция **Форма** — обычное представление над `ods.event_v`, вторым уровнем: `FINAL` спрятан в один слой, условия доезжают до индексов (research #128). Оговорки соблюдены: `event_date` — переименованием, не пересчётом; цена `FINAL` (без авто-PREWHERE) — свойство ODS. **Язык модели** — имена атрибутов модели, не нормализованные имена источника. Расхождения: `WatchID` → `event_id`; `UTCEventTime` → `event_time` в поясе счётчика (`Europe/Samara`), второй метки времени нет — UTC остаётся языком ODS; `EventDate` → `event_date`. `ClientID` остаётся `client_id` (устоявшееся имя куки, шардирование, мост к identity_map). **Расшифровки** — только `device_category`: коды 1–4 в `desktop` / `mobile` / `tablet` / `tv` (у Метрики атрибут и есть строка). Регионы не расшифровываются — названия уже едут рядом с id; идея лабы «справочник регионов руками менти» — #143. **Скрыто** — `VisitID` (чужой суррогат сессии; DQ-сверка идёт за эталоном в `ods.event_v` — решение владельца: опыт показательнее), `Sign` (колонка формата без механики), `ecommerce` (сырьё, разобранные массивы в контракте есть), `_load_id`/`_load_ts` (у представления нет собственной загрузки). Остальные ~40 колонок отдаются целиком. Дока с отклонёнными вариантами: `docs/architecture/dds/event.md` (PR #144).
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Blocks Depends on
Reference: ddmitry/clickstream-data-platform#132