Карта идентичностей: dds.identity_map и полный пересчёт #153

Closed
opened 2026-08-25 15:01:01 +03:00 by ddmitry · 0 comments
Owner

Part of #6.

Цель

Мост «кука ↔ пользователь»: физическая карта с точным публичным
представлением, полный пакетный пересчёт через GLOBAL JOIN. Учебный
результат (identity.md): ко-локация по ключу будущего соединения и
сочетание полного пересчёта с точным _v.

Что войдёт

  • DDL по identity.md: dds.identity_map_rep —
    ReplicatedReplacingMergeTree(_load_ts), ORDER BY (client_id, user_id), без партиционирования; dds.identity_map_dist — шардирование
    cityHash64(client_id); dds.identity_map_v — четыре колонки явно,
    FINAL; грант bi_reader на _v.
  • Полный пересчёт по identity.md: пары из purchase-событий dds.event_v
    и заказов dds.order_v через GLOBAL INNER JOIN, обе стороны —
    подзапросы (#129); соединение по purchase_id[1] = order_id — имя
    контракта, в ODS это purchaseID; правило одного элемента массива —
    комментарием в SQL (спека §4).
  • Задача identity_map в dds_transform после заказов; при догоняющем
    запуске — одна сборка после всей пачки.

Границы

  • first_matched_at не заводить (лаба #145); инкремент и anti-join
    отклонены развилкой (identity.md).
  • Витрина daily_traffic — тикет витрин.

Кому что

SQL пересчёта — Opus. Codex — опыты по брифу: два прогона подряд,
физические дубли до слияния против точного _v.

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

  • docs/architecture/dds/identity.md — целиком, это спека тикета;
  • docs/research/2026-08-22-distributed-join.md — форма GLOBAL JOIN и
    капкан вставки между разными ключами шардирования;
  • мастер-спека, раздел 5 — склейка идентичностей.

Проверка

  • make lint; на стенде make smoke, make check-clickhouse и
    make check-services (в даг пришла новая задача) зелёные.
  • На стартовом мире карта не пуста; после двух прогонов подряд каждая
    пара в _v уникальна (повторы скрыты FINAL).
  • Каждая пара подтверждается обратным запросом: есть событие
    purchase этой куки, чей purchase_id[1] — заказ этого пользователя.
  • Пара лежит на шарде своего client_id — ко-локация с событиями и
    сессиями.
Part of #6. ## Цель Мост «кука ↔ пользователь»: физическая карта с точным публичным представлением, полный пакетный пересчёт через GLOBAL JOIN. Учебный результат (identity.md): ко-локация по ключу будущего соединения и сочетание полного пересчёта с точным `_v`. ## Что войдёт - DDL по identity.md: `dds.identity_map_rep` — `ReplicatedReplacingMergeTree(_load_ts)`, `ORDER BY (client_id, user_id)`, без партиционирования; `dds.identity_map_dist` — шардирование `cityHash64(client_id)`; `dds.identity_map_v` — четыре колонки явно, `FINAL`; грант `bi_reader` на `_v`. - Полный пересчёт по identity.md: пары из purchase-событий `dds.event_v` и заказов `dds.order_v` через `GLOBAL INNER JOIN`, обе стороны — подзапросы (#129); соединение по `purchase_id[1] = order_id` — имя контракта, в ODS это `purchaseID`; правило одного элемента массива — комментарием в SQL (спека §4). - Задача `identity_map` в `dds_transform` после заказов; при догоняющем запуске — одна сборка после всей пачки. ## Границы - `first_matched_at` не заводить (лаба #145); инкремент и anti-join отклонены развилкой (identity.md). - Витрина `daily_traffic` — тикет витрин. ## Кому что SQL пересчёта — Opus. Codex — опыты по брифу: два прогона подряд, физические дубли до слияния против точного `_v`. ## Сначала прочитать - docs/architecture/dds/identity.md — целиком, это спека тикета; - docs/research/2026-08-22-distributed-join.md — форма GLOBAL JOIN и капкан вставки между разными ключами шардирования; - мастер-спека, раздел 5 — склейка идентичностей. ## Проверка - [x] `make lint`; на стенде `make smoke`, `make check-clickhouse` и `make check-services` (в даг пришла новая задача) зелёные. - [x] На стартовом мире карта не пуста; после двух прогонов подряд каждая пара в `_v` уникальна (повторы скрыты `FINAL`). - [x] Каждая пара подтверждается обратным запросом: есть событие `purchase` этой куки, чей `purchase_id[1]` — заказ этого пользователя. - [x] Пара лежит на шарде своего `client_id` — ко-локация с событиями и сессиями.
ddmitry self-assigned this 2026-08-26 18:54:46 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Reference: ddmitry/clickstream-data-platform#153