Mutation简介
Clickhouse Mutation操作是通过ALTER TABLE
命令执行的,它可以用于更新(UPDATE)或删除(DELETE)表中的数据。这种操作在某些情况下非常有用,但通常不推荐频繁使用,因为它可能对性能产生影响。
使用ALTER TABLE ... UPDATE
命令可以更新表中的行:
ALTER TABLE viid_person ON CLUSTER vss_test UPDATE score = score + 5 WHERE id > 10;
这个操作是异步执行的,意味着它将在后台进行,可能不会立即在表中看到更新的效果。
使用ALTER TABLE ... DELETE
命令可以删除表中的行:
ALTER TABLE table_name DELETE WHERE condition;
和更新操作一样,删除操作也是异步的。
监控Mutation进度
在ClickHouse中,监控Mutation操作的进度和状态可以通过系统表system.mutations
来实现。这个表记录了MergeTree表的mutation操作及其执行状态的信息。
mutations表部分字段如下
:
database
: 应用mutation的数据库名称。table
: 应用mutation的表名称。mutation_id
: mutation的ID,对于复制表,这些ID对应于ZooKeeper中相应目录下的znode名称;对于非复制表,ID对应表的数据目录中的文件名 。command
: mutation命令字符串,即ALTER TABLE [db.]table
语句之后的部分。create_time
: mutation命令提交执行的日期和时间。parts_to_do
: 需要应用mutation的part的数量。is_done
: mutation是否完成的标志,1
表示完成,0
表示仍在进行中。
要跟踪正在进行的mutation操作,可以使用下面的语句:
SELECT * FROM system.mutations WHERE is_done = 0;
is_done=0表示所有尚未完成的mutation操作。
system.mutations
表还包含以下列来提供额外信息:
latest_failed_part
: 最近不能mutation的part的名称。latest_fail_time
: 最近的一个mutation失败的时间。latest_fail_reason
: 导致最近part的mutation失败的异常消息。
这些信息可以帮助定位mutation过程中出现的问题 。
system.mutations
表中的记录不会立即删除,mutations保留的记录数通过参数finished_mutations_to_keep
来设定,当mutations记录数超过设定值时,超出数量的记录会被删除。