RENAME 与 EXCHANGE 是什么
RENAME TABLE 重命名表,EXCHANGE TABLES 原子交换两张表的元数据(要求 Atomic 引擎库),配合 ON CLUSTER 可以把 DDL 下发到集群所有节点。EXCHANGE 不搬运数据,是重建大表的常用切换手段:新表灌数据期间旧表保持可查,灌完后一次交换完成上线,出问题时再交换一次即可回退,整个过程不产生数据拷贝。
基本信息
| 重命名 | RENAME TABLE a TO b |
|---|---|
| 交换 | EXCHANGE TABLES a AND b |
| 原子性 | Atomic 数据库下两者都是原子操作 |
| 集群 | 加 ON CLUSTER <name> 在集群维度执行 DDL |
| 权限 | 需要 alter 权限 |
| 所属系统 | ClickHouse |
典型使用场景
- 重建大表:新表装配完成后原子切换,避免长时间停写
- 快速回退:上线后发现问题,再交换一次即可回到旧表
- 命名规范:把历史遗留的不规范表名统一
- 集群下发:在多节点上一次性完成重命名或交换
- 切换前校验:并行比对新旧表的行数与关键指标
重命名与交换
重命名与交换
RENAME TABLE events TO events_old; -- 重命名,把历史表改名保留
-- 新表灌好数据后原子换回
EXCHANGE TABLES events_new AND events; -- 只交换元数据,不搬数据
-- 集群范围执行(各节点对象要一致)
-- EXCHANGE TABLES events_new AND events ON CLUSTER prod;操作对照
| 操作 | 效果 | 注意 |
|---|---|---|
| RENAME TABLE | 修改表名 | Atomic 库下是原子操作 |
| EXCHANGE TABLES | 交换两张表 | 需同库且为 Atomic 引擎 |
| ON CLUSTER | 下发到集群各节点 | 各节点对象必须一致 |
| 回退 | 反向再交换一次 | 比重新回灌数据快得多 |
| 校验 | 交换前后比对行数与指标 | 避免切到不完整的新表 |
EXCHANGE 不搬数据、只交换元数据,是重建大表的常用切换手段:新表构建期间旧表保持可查,切换瞬间完成。
EXCHANGE 要求两张表在同一个库且都是 Atomic 引擎下的普通表;复制表跨集群交换要确认每个副本的状态,否则会出现部分节点成功、部分失败的情况。
用 ON CLUSTER 执行 RENAME 或 EXCHANGE 前要确认各节点上的对象一致,否则部分节点成功会留下不一致状态,后续补做的成本比一次做对高得多。