如何避免Clickhouse表重复?

时间:2018-11-23 07:47:55

标签: clickhouse

我创建了表,并尝试多次插入值以检查重复项。我可以看到重复项正在插入。有没有办法避免Clickhouse表格重复?

创建表sample.tmp_api_logs(id UInt32,EventDate Date)ENGINE = MergeTree(EventDate,id,(EventDate,id),8192);

插入sample.tmp_api_logs值(1,'2018-11-23'),(2,'2018-11-23'); 插入sample.tmp_api_logs值(1,'2018-11-23'),(2,'2018-11-23');

从sample.tmp_api_logs中选择*; ┌─id─┬─EventDate─┐ │1│2018-11-23│ │2│2018-11-23│ └────┴────────── ┌─id─┬─EventDate─┐ │1│2018-11-23│ │2│2018-11-23│ └────┴──────────┘

2 个答案:

答案 0 :(得分:1)

只要重复记录重复主键,就很可能需要ReplacingMergeTree。当遇到复制记录时,您也可以尝试其他MergeTree引擎进行更多操作。进行查询以确保唯一性时可以使用FINAL关键字。

答案 1 :(得分:1)

如果原始数据不包含重复项,并且它们可能仅在INSERT INTO重试期间出现,则ReplicatedMergeTree中具有重复数据删除功能。为了使其正常工作,您应该重试完全相同批次的数据(相同顺序的同一组行)。您可以对这些重试使用不同的副本,并且数据块将仅插入一次,因为通过ZooKeeper在副本之间共享块散列。

否则,您应该在插入ClickHouse之前在外部对数据进行重复数据删除,或者使用ReplacingMergeTree or ReplicatedReplacingMergeTree异步清理重复数据。

相关问题