跳至主要内容
跳至主要内容

ALTER

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

修改器
COLUMN
PARTITION
DELETE
UPDATE
ORDER BY
INDEX
CONSTRAINT
TTL
STATISTICS
应用删除掩码
应用补丁
注意

大多数 ALTER TABLE 查询仅支持用于 *MergeTreeMergeDistributed 表。

这些 ALTER 语句操作视图

语句描述
ALTER TABLE ... MODIFY QUERY修改 物化视图 结构。

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

语句
USER
ROLE
QUOTA
ROW POLICY
SETTINGS PROFILE
语句描述
ALTER TABLE ... 修改 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 MASKAPPLY PATCHESCLEAR 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

    © . This site is unofficial and not affiliated with ClickHouse, Inc.