feat(clickhouse): добавлен словарь товаров из каталога #104

Merged
ddmitry merged 1 commits from feat/95-product-dictionary into main 2026-08-19 07:38:18 +03:00
Owner

Closes #95

Что сделано

  • data/catalog/products.csv смонтирован read-only в обе ноды и создан как dds.products ON CLUSTER.
  • Словарь использует FILE(CSVWithNames), строковый ключ COMPLEX_KEY_HASHED, цену Int64 в копейках и LIFETIME(0).
  • etl, bi и analyst получили dictGet; make check-clickhouse сверяет имя, категорию и цену с исходным CSV под etl на обеих нодах.
  • Решение по источнику, раскладке и явной кластерной перезагрузке записано в storage.md.

Политика обновления

Каталог меняется вместе с репозиторием. Фоновое обновление отключено, чтобы ноды не отвечали разными версиями. После правки администратор выполняет под default:

SYSTEM RELOAD DICTIONARY ON CLUSTER clickstream_cluster dds.products;

Собственного механизма обновления нет.

Проверка

  • Чистый make up прошёл с первого раза; обе ноды ClickHouse: healthy, RestartCount=0.
  • make lint — зелёный.
  • make config-test — зелёный.
  • make smoke — 20/20, 27 с.
  • make check-clickhouse — 10/10, 24 с.
  • В generator/: make lint typecheck test — зелёный, 427 тестов за 289,34 с.
  • Отдельный dictGet под bi и analyst вернул ожидаемый товар.

Разовый опыт обновления

В HOME-0001 цена временно изменена с 129000 на 129001, затем выполнена кластерная команда выше через docker compose exec на первой ноде. Команда заняла 4,1 с; dictGet на обеих нодах вернул 129001. CSV откатан, повторная перезагрузка заняла 3,7 с, обе ноды вернулись к 129000. После отката полный набор из 427 тестов генератора прошёл.

Ревью

Линию дефектов провёл свежий Opus craftsman, линию уместности — Opus deep-reasoner. Каждая находка перепроверена на стенде; подтверждённые исправлены, итоговый diff прошёл отдельный узкий re-check.

Closes #95 ## Что сделано - `data/catalog/products.csv` смонтирован read-only в обе ноды и создан как `dds.products ON CLUSTER`. - Словарь использует `FILE(CSVWithNames)`, строковый ключ `COMPLEX_KEY_HASHED`, цену `Int64` в копейках и `LIFETIME(0)`. - `etl`, `bi` и `analyst` получили `dictGet`; `make check-clickhouse` сверяет имя, категорию и цену с исходным CSV под `etl` на обеих нодах. - Решение по источнику, раскладке и явной кластерной перезагрузке записано в `storage.md`. ## Политика обновления Каталог меняется вместе с репозиторием. Фоновое обновление отключено, чтобы ноды не отвечали разными версиями. После правки администратор выполняет под `default`: ```sql SYSTEM RELOAD DICTIONARY ON CLUSTER clickstream_cluster dds.products; ``` Собственного механизма обновления нет. ## Проверка - Чистый `make up` прошёл с первого раза; обе ноды ClickHouse: `healthy`, `RestartCount=0`. - `make lint` — зелёный. - `make config-test` — зелёный. - `make smoke` — 20/20, 27 с. - `make check-clickhouse` — 10/10, 24 с. - В `generator/`: `make lint typecheck test` — зелёный, 427 тестов за 289,34 с. - Отдельный `dictGet` под `bi` и `analyst` вернул ожидаемый товар. ## Разовый опыт обновления В `HOME-0001` цена временно изменена с `129000` на `129001`, затем выполнена кластерная команда выше через `docker compose exec` на первой ноде. Команда заняла 4,1 с; `dictGet` на обеих нодах вернул `129001`. CSV откатан, повторная перезагрузка заняла 3,7 с, обе ноды вернулись к `129000`. После отката полный набор из 427 тестов генератора прошёл. ## Ревью Линию дефектов провёл свежий Opus `craftsman`, линию уместности — Opus `deep-reasoner`. Каждая находка перепроверена на стенде; подтверждённые исправлены, итоговый diff прошёл отдельный узкий re-check.
ddmitry added 1 commit 2026-08-19 00:51:37 +03:00
- Зачем:
  - витринам нужен общий с генератором каталог, а менти — пример штатного обновления словаря.
- Что:
  - каталог смонтирован read-only в обе ноды и создан как dds.products ON CLUSTER.
  - роли получили dictGet, а check-clickhouse сверяет ответ под etl с исходным CSV.
  - источник, раскладка и явная политика обновления записаны в документации.
- Проверка:
  - make up с чистыми томами; make lint; make config-test; make smoke; make check-clickhouse.
  - в generator: make lint typecheck test — 427 тестов прошли.
ddmitry merged commit 862dde9fa4 into main 2026-08-19 07:38:18 +03:00
ddmitry deleted branch feat/95-product-dictionary 2026-08-19 07:38:18 +03:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: ddmitry/clickstream-data-platform#104