什么是 schema 管理?
为什么这很重要?
schema 管理方法的类别
命令式
CREATE TABLE、ALTER TABLE 或 DROP COLUMN) 写入文件中。然后,工具会按顺序执行这些文件,并跟踪哪些文件已经应用。在这一类方法中,你需要明确指定要执行的 SQL。
示例:Golang Migrate、Goose 和 Flyway。
声明式
选择工具时需要考虑的事项
你的团队已经在用什么?
您期望采用什么流程?
- 简单的“编写 SQL、在 CI 中运行、完成”的工作流,例如 Goose 或 Golang Migrate。
- 带有审批管理、审计记录和 RBAC 的工作流,例如 Bytebase 或 Liquibase。
- 以声明式方式定义您的 schema,并让工具自行判断差异,例如 Atlas。
推荐工具
Atlas
- Type: 声明式
- Language: Go,以单个二进制可执行文件形式分发
- License and availability: Open Core;Atlas 命令行客户端提供 Apache 2.0 社区版,但 ClickHouse 支持需要 Pro 方案或试用
- 集群支持: 是
Golang Migrate
schema_migrations 表里跟踪状态。
为什么它很适合 ClickHouse: 它简单且灵活。你可以准确编写自己想要执行的 ClickHouse DDL。它是单个 Go 二进制文件,没有 runtime 依赖项,因此很容易集成到 CI/CD 管道或 Docker 容器中。
需要注意的地方: 如果某个 migration 文件包含多条语句,而其中一条执行到一半失败,database 可能会处于部分已应用的状态,需要手动干预。遵循“每个文件只包含一条语句”的原则,就能较好地避免这种情况。
最适合: 适合希望保持简单,并且完全掌控针对其 ClickHouse instance 执行哪些 SQL 的团队。
- Type: 命令式
- Language: Go
- License: 开源,MIT
- 集群支持: 是
Goose
- 类型: 命令式
- 语言: Go,以单个二进制可执行文件形式分发
- 许可证: 开源,MIT
- 集群支持: 不支持