Зачем: стенду нужен воспроизводимый холодный старт, при котором схема хранилища и топик появляются сами, а сырьё из Kafka доезжает в STG обеими нодами кластера — без ручных шагов между `make clean` и рабочим приёмом. Что: - `sql/ddl/` — три файла, применяются по порядку имён: базы `stg` и `ods`, Kafka-чтец `hits_raw_kafka` формата RawBLOB, реплицируемая `hits_raw_rep` с окном TTL в трое суток, распределённая `hits_raw_dist` и матвью `hits_raw_mv`, переносящая сырьё вместе с метаданными доставки. - `compose.yaml` — службы `kafka-init` (топик `hits` на две партиции, с ремонтом уже созданного однопартиционного) и `clickhouse-init` (применяет `/ddl/*.sql`); `hostname:` у обеих нод, чтобы `hostName()` отдавал имя узла, а не идентификатор контейнера; `airflow-init` зависит от `clickhouse-init` — без зависимого успешный одноразовый сервис считается упавшим для `--wait`. - Доки: конвенции и раздел «Что проверено» в справочнике хранилища, указатели и границы обещаний в ADR 0005, снятые пункты в разделе 11 спеки. Проверка: `make lint`, `make typecheck`, `make config-test`, `make smoke` (25 проверок), `make smoke-guards` — зелёные. Приёмочный прогон с чистого тома подтвердил все пять критериев #37: холодный старт и идемпотентный повтор, две партиции у `hits`, метаданные доставки у доехавшего сообщения, обе партиции на обеих потребляющих нодах в одном прогоне, некорректный JSON лежит сырым и приём не встаёт. Известная граница: RawBLOB молча теряет запись с пустым значением и запись-надгробие; принято как свойство, замер и довод — в справочнике хранилища. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
16 lines
974 B
SQL
16 lines
974 B
SQL
-- Базы слоёв хранилища.
|
|
--
|
|
-- Файлы этой папки применяются по порядку имён с ноды 1 и всегда ON CLUSTER:
|
|
-- объекты обязаны появиться на обеих нодах, иначе распределённая таблица
|
|
-- окажется лицом половины кластера. Имя кластера — clickstream_cluster,
|
|
-- задано в infra/clickhouse/config.d/cluster.xml.
|
|
--
|
|
-- Идемпотентность везде через IF NOT EXISTS: make up применяет эти файлы и
|
|
-- поверх живого тома.
|
|
|
|
CREATE DATABASE IF NOT EXISTS stg ON CLUSTER clickstream_cluster;
|
|
|
|
-- База ODS заводится здесь же, хотя её объекты приносит #43: базы дёшевы, а
|
|
-- порядок файлов от этого не зависит.
|
|
CREATE DATABASE IF NOT EXISTS ods ON CLUSTER clickstream_cluster;
|