跳至主要内容

ALTER

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

注意

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

这些 ALTER 语句操作视图

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

ALTER TABLE ... MODIFY COMMENT 语句添加、修改或删除表的注释,无论之前是否设置过。

ALTER NAMED COLLECTION 语句修改 命名集合

变异

旨在操作表数据的 ALTER 查询通过称为“变异”的机制实现,最显著的是 ALTER TABLE ... DELETEALTER TABLE ... UPDATE。它们是类似于 MergeTree 表中合并的异步后台进程,用于生成新“变异”的部分版本。

对于 *MergeTree 表,变异通过**重写整个数据部分**来执行。没有原子性 - 部分在准备好后立即替换为变异部分,并且在变异期间开始执行的 SELECT 查询将看到来自已变异部分的数据以及来自尚未变异部分的数据。

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

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

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

ALTER 查询的同步性

对于非复制表,所有 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