Зачем: место словаря в dds было унаследовано от первого объекта, а не решено. Справочник читают несколько слоёв, а производит его в хранилище ни один — прописка внутри одного из потребителей приписывала DDS владение, которого у него нет. Что: заведена база dic вне цепочки STG → ODS → DDS → DM, dds.products переехал в dic.products. Под словарём появилась подложка dic.products_file на движке File — намеренное усложнение ради урока: в бою источник словаря приезжает процессом, а не лежит файлом у сервера. Источник объявлен формой query и приводит цену из целых копеек каталога в Decimal(18, 2), как у денег бэкенда. Обновление — окном LIFETIME(MIN 60 MAX 90) вместо ручной перезагрузки, ценой заявленной неатомарности между нодами. У словаря свой беспарольный пользователь dict с единственным правом на чтение dic. Суффикс _file добавлен в конвенцию имён ADR 0006. Решение, отвергнутые варианты и условия пересмотра — ADR 0012. Проверка: make clean && make up на собранном заново стенде — зелено, make smoke 20 проверок и 0 ошибок, make lint чисто. Словарь LOADED со 180 строками, цена Decimal(18, 2) и точна на копейках: 188990 → 1889.90. Пользователь bi читает словарь dictGet-ом со второй ноды, analyst — подложку соединением, база dds пуста. Минимальное право на движок замерено тремя пользователями: достаточно GRANT FILE ON *.*, хотя отказ называет TABLE ENGINE ON File. Closes #105 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
25 lines
1.7 KiB
SQL
25 lines
1.7 KiB
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;
|
|
|
|
-- Объекты DDS появятся на следующем этапе; база заводится заранее по той же
|
|
-- причине, что и ODS.
|
|
CREATE DATABASE IF NOT EXISTS dds ON CLUSTER clickstream_cluster;
|
|
|
|
-- Справочники стоят вне цепочки STG → ODS → DDS → DM: в хранилище их никто не
|
|
-- производит, а читают их несколько слоёв ([ADR 0012]). Поэтому зона своя, и
|
|
-- порядок слоёв к ней не применяется — её файл идёт сразу за этим.
|
|
CREATE DATABASE IF NOT EXISTS dic ON CLUSTER clickstream_cluster;
|