ALTER
大多数 ALTER TABLE
查询会修改表设置或数据
修饰符 |
---|
COLUMN |
PARTITION |
DELETE |
UPDATE |
ORDER BY |
INDEX |
CONSTRAINT |
TTL |
STATISTICS |
APPLY DELETED MASK |
大多数 ALTER TABLE
查询仅支持 *MergeTree、Merge 和 Distributed 表。
这些 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 ... DELETE 和 ALTER TABLE ... UPDATE。它们是类似于 MergeTree 表中合并的异步后台进程,用于生成新的“突变”版本的部分。
对于 *MergeTree
表,突变通过重写整个数据部分来执行。没有原子性——部分在突变部分准备就绪后立即被替换,并且在突变期间开始执行的 SELECT
查询将看到来自已突变部分的数据以及来自尚未突变部分的数据。
突变完全按其创建顺序排序,并按该顺序应用于每个部分。突变也与 INSERT INTO
查询部分排序:在提交突变之前插入到表中的数据将被突变,之后插入的数据将不会被突变。请注意,突变不会以任何方式阻止插入。
突变查询在突变条目添加后立即返回(对于复制表,添加到 ZooKeeper;对于非复制表,添加到文件系统)。突变本身使用系统配置文件设置异步执行。要跟踪突变的进度,您可以使用 system.mutations
表。即使 ClickHouse 服务器重新启动,成功提交的突变也将继续执行。一旦提交突变,就无法回滚突变,但如果突变由于某种原因卡住,可以使用 KILL MUTATION
查询取消它。
已完成突变的条目不会立即删除(保留条目的数量由 finished_mutations_to_keep
存储引擎参数确定)。较旧的突变条目将被删除。
ALTER 查询的同步性
对于非复制表,所有 ALTER
查询都同步执行。对于复制表,查询只是将适当操作的指令添加到 ZooKeeper
,并且操作本身会尽快执行。但是,查询可以等待这些操作在所有副本上完成。
对于创建突变的 ALTER
查询(例如:包括但不限于 UPDATE
、DELETE
、MATERIALIZE INDEX
、MATERIALIZE PROJECTION
、MATERIALIZE COLUMN
、APPLY DELETED MASK
、CLEAR STATISTIC
、MATERIALIZE STATISTIC
),同步性由 mutations_sync 设置定义。
对于其他仅修改元数据的 ALTER
查询,您可以使用 alter_sync 设置来设置等待。
您可以指定等待非活动副本执行所有 ALTER
查询的时长(以秒为单位),通过 replication_wait_for_inactive_replica_timeout 设置。
对于所有 ALTER
查询,如果 alter_sync = 2
并且某些副本的非活动时间超过 replication_wait_for_inactive_replica_timeout
设置中指定的时间,则会抛出异常 UNFINISHED
。