Что такое управление схемой?
Почему это важно?
Подходы к управлению схемой
Императивный подход
CREATE TABLE, ALTER TABLE или DROP COLUMN. Затем инструмент выполняет эти файлы по порядку и отслеживает, какие из них уже были применены. В рамках этого подхода вы сами задаёте, какой именно SQL нужно выполнить.
Примеры: Golang Migrate, Goose и Flyway.
Декларативный
Что следует учитывать при выборе инструмента
Что ваша команда уже использует?
Какой процесс вам нужен?
- Простой процесс по принципу «написали SQL, запустили в CI, готово», как в Goose или Golang Migrate.
- Управляемые процессы согласования, журнал аудита и RBAC, как в Bytebase или Liquibase.
- Декларативное описание схемы, при котором инструмент сам определяет различия, как в Atlas.
Рекомендуемые инструменты
Atlas
- Тип: Декларативный
- Язык: Go, поставляется как единый бинарный файл
- Лицензия и доступность: Open Core; Atlas CLI имеет community edition по лицензии Apache 2.0, но поддержка ClickHouse требует тариф Pro или пробный период
- Поддержка кластеров: Да
Golang Migrate
schema_migrations в вашей базе данных ClickHouse.
Почему это хорошо работает с ClickHouse: Это простой и гибкий инструмент. Вы пишете именно тот DDL ClickHouse, который хотите выполнить. Это один бинарный файл Go без зависимостей времени выполнения, поэтому его легко встроить в конвейер CI/CD или в Docker-контейнер.
На что обратить внимание: Если файл миграции содержит несколько операторов и один из них завершается ошибкой в середине выполнения, база данных может остаться в частично применённом состоянии, и тогда потребуется ручное вмешательство. С этим можно справиться, если придерживаться правила: один оператор на файл.
Лучше всего подходит для: Команд, которым нужны простота и полный контроль над тем, какой именно SQL выполняется на их экземпляре ClickHouse.
- Тип: Императивный
- Язык: Go
- Лицензия: С открытым исходным кодом, MIT
- Поддержка кластеров: Да
Goose
- Тип: Императивный
- Язык: Go, распространяется как единый бинарный файл
- Лицензия: С открытым исходным кодом, MIT
- Поддержка кластеров: No