轻量级删除
自 v22.8 起可用
MergeTree 表的标准 DELETE 语法已在#37893 https://github.com/ClickHouse/ClickHouse/pull/37893.
SET allow_experimental_lightweight_delete = 1;
DELETE FROM merge_table_standard_delete WHERE id = 10;
使用 Mutations 改变数据
请参阅有关突变功能的文档https://clickhouse.yandex/docs/en/query_language/alter/#mutations https://clickhouse.yandex/docs/en/query_language/alter/#mutations.
该功能于 2018 年第三季度实施。
删除数据
ALTER TABLE <table> DELETE WHERE <filter expression>
“脏”全部删除
你总是必须指定一个过滤表达式。如果您想通过 Mutation 删除所有数据,请指定始终为 true 的内容,例如:
ALTER TABLE <table> DELETE WHERE 1=1
更新数据
也有可能变异(UPDATE
)类似的方式
ALTER TABLE <table> UPDATE column1 = expr1 [, ...] WHERE <filter expression>
注意它是异步的
请注意,上面的所有命令不会直接(同步)执行数据突变。相反,他们安排在后台独立(异步)执行的 ClickHouse Mutation。这就是为什么ALTER TABLE
选择语法而不是典型的 SQLUPDATE
/DELETE
。您可以通过以下方式检查未完成的突变进度
SELECT *
FROM system.mutations
WHERE is_done = 0
...除非
你改变了mutations_sync设置 https://clickhouse.tech/docs/en/operations/settings/settings/#mutations_sync to
不使用 Mutations 更改数据
有的TRUNCATE TABLE
语句的语法如下:
TRUNCATE TABLE [IF EXISTS] [db.]name [ON CLUSTER cluster]
这会同步截断表。它将检查表大小,因此如果表大小超过,则不允许您删除max_table_size_to_drop
。请参阅此处的文档:
https://clickhouse.tech/docs/en/sql-reference/statements/truncate/ https://clickhouse.tech/docs/en/sql-reference/statements/truncate/