使用ReplacingMergeTree作为可更新表:如何删除?

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

我正在使用 ClickHouse 来构建“一种可更新的大型(数亿行)表”,并带有

ReplacingMergeTree
。我需要批量更新插入并进行一些非聚合选择。效果很好。

尽管它有点像黑客,而且远非最佳(我的意思是与 OLAP 的 Clickhouse 不同),但它可以很好地扩展,并且仍然比或多或少专门用于此目的的系统(如 HBase 或 RDBM)(满足我的需要)执行得更快。

我使用带钥匙的

ReplacingMergeTree
桌子:

CREATE TABLE Things (Key Int32, ValueA Int32, ValueB Int32) 
ENGINE = ReplacingMergeTree() ORDER BY Key

我更新插入:

INSERT INTO Things (Key,ValueA,ValueB) ...

并使用“

FINAL
”修饰符进行选择:

SELECT Key,ValueA,ValueB FROM Things FINAL WHERE ...

我可以使用名为“Killed”的列“删除”对象。但有时,我需要清理“杀死”的对象,以防止表无休止地增长。

我发现的唯一方法是重新创建一个新表并在其中插入未杀死的行。 有更聪明的方法吗?

clickhouse
3个回答
1
投票

ClickHouse 在最近的版本中支持

DML
操作,因此您不需要
ReplacingMergeTree
那样的逻辑删除记录。

查看 https://clickhouse.yandex/docs/en/query_language/alter/#mutations 了解更多详细信息。


0
投票

您可以创建物化视图并在那里保存新记录。 来源


0
投票

您可以在有条件的表上使用 TTL。只需确保忽略查询中已删除的条目即可。

CREATE TABLE ....
(
.
.
    is_deleted UInt8
) ENGINE = AggregatingMergeTree
      ORDER BY (...)
      TTL if(is_deleted == 1, now(), toDateTime('2106-02-07'));
© www.soinside.com 2019 - 2024. All rights reserved.