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

ALTER

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

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

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

这些 ALTER 语句操作视图

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

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

语句
USER
ROLE
QUOTA
ROW POLICY
SETTINGS PROFILE
语句描述
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 设置来设置等待。

您可以指定等待非活动副本执行所有 ALTER 查询的时长(以秒为单位),通过 replication_wait_for_inactive_replica_timeout 设置。

注意

对于所有 ALTER 查询,如果 alter_sync = 2 并且某些副本的非活动时间超过 replication_wait_for_inactive_replica_timeout 设置中指定的时间,则会抛出异常 UNFINISHED