跳到主要内容
跳到主要内容

ALTER

大多数 ALTER TABLE 查询修改表设置或数据:

修饰符
COLUMN
PARTITION
DELETE
UPDATE
ORDER BY
INDEX
CONSTRAINT
TTL
STATISTICS
APPLY DELETED MASK
备注

大多数 ALTER TABLE 查询仅支持 *MergeTree, MergeDistributed 表。

这些 ALTER 语句操作视图:

语句描述
ALTER TABLE ... MODIFY QUERY修改 物化视图 结构。
ALTER LIVE VIEW刷新 实时视图

这些 ALTER 语句修改与基于角色的访问控制相关的实体:

语句
USER
ROLE
QUOTA
ROW POLICY
SETTINGS PROFILE
语句描述
ALTER TABLE ... MODIFY COMMENT向表添加、修改或删除注释,无论其是否之前已设置。
ALTER NAMED COLLECTION修改 命名集合

Mutations

旨在操作表数据的 ALTER 查询通过一种称为“变更”的机制实现,特别是 ALTER TABLE ... DELETEALTER TABLE ... UPDATE。它们是异步后台进程,类似于 MergeTree 表中的合并,以生成“变更”版本的分片。

对于 *MergeTree 表,变更通过 重写整个数据分片 来执行。 没有原子性—一旦分片准备好,就会用变更的分片替换原来的分片,在变更过程中开始执行的 SELECT 查询会看到已经变更的分片的数据以及尚未变更的分片的数据。

变更按照其创建顺序完全排序,并按该顺序应用于每个分片。变更与 INSERT INTO 查询部分排序:在提交变更之前插入表中的数据将被变更,而在变更提交后插入的数据不会被变更。请注意,变更不会以任何方式阻塞插入。

变更查询在变更条目添加后立即返回(对于复制表则是添加到 ZooKeeper,对于非复制表则是添加到文件系统)。变更本身使用系统配置设置异步执行。要跟踪变更的进度,可以使用 system.mutations 表。成功提交的变更将继续执行,即使 ClickHouse 服务器重启。一旦提交变更,就无法回滚,但如果变更因某种原因被卡住,可以通过 KILL MUTATION 查询取消该变更。

已完成变更的条目不会立即删除(保留条目的数量由 finished_mutations_to_keep 存储引擎参数决定)。旧的变更条目会被删除。

Synchronicity of ALTER Queries

对于非复制表,所有 ALTER 查询都是同步执行的。对于复制表,该查询只是将相应操作的指令添加到 ZooKeeper,这些操作将在尽可能快的时间内执行。然而,查询可以等待这些操作在所有副本上完成。

对于创建变更的 ALTER 查询(例如:包括但不限于 UPDATEDELETEMATERIALIZE INDEXMATERIALIZE PROJECTIONMATERIALIZE COLUMNAPPLY DELETED MASKCLEAR STATISTICMATERIALIZE STATISTIC),同步性由 mutations_sync 设置定义。

对于其他仅修改元数据的 ALTER 查询,您可以使用 alter_sync 设置来配置等待。

您可以使用 replication_wait_for_inactive_replica_timeout 设置指定等待多少秒(以秒为单位)来等待非活动副本执行所有 ALTER 查询。

备注

对于所有 ALTER 查询,如果 alter_sync = 2 且某些副本在 replication_wait_for_inactive_replica_timeout 设置中指定的时间内未激活,则会抛出异常 UNFINISHED