ClickHouse表数据删除

问题描述 投票:0回答:1

我有集群的 clickhouse 实例并观察以下行为:当我使用例如 cluster cl1 delete where event_date = 20231212 上的 alter table db.tb 删除 clickhouse 每个节点上的数据时,当我运行此脚本时,删除语句执行得非常快,但是当我使用 event_date = 20231212 从表中选择数据时,我看到数据仍在表中(尽管当我在上次检查后重复检查行数时,数据会慢慢减少)。删除后,我需要使用相同的 event_date = 20231212 加载数据,但我没有看到任何机制可以避免我删除正在删除但尚未删除的数据,因此这可能会以删除/插入事务中的混合数据结束。有没有办法避免这样的潜在问题?

transactions sql-delete clickhouse
1个回答
0
投票

假设您使用 *MergeTree 表引擎,ClickHouse 中的删除和更新(又名突变)在合并时在后台异步执行 [https://clickhouse.com/docs/en/sql-reference/statements/alter#mutations ]

如果您希望

ALTER TABLE...DELETE
立即发生,那么可能会建议使用mutations_sync 选项 [https://clickhouse.com/docs/en/operations/settings/settings#mutations_sync]

在 DELETE 语句中使用

SETTINGS mutations_sync = 1;
SETTINGS mutation_sync = 2;
(取决于单个副本或多个副本)选项,以确保同步执行删除

如果运行异步突变,您还可以检查 system.mutations 表以确定突变是否完成:

SELECT mutation_id,*
FROM clusterAllReplicas('default',system.mutations)
WHERE is_done = 0;

希望这有帮助,祝你好运

© www.soinside.com 2019 - 2024. All rights reserved.