我已经创建了表并尝试多次插入值来检查重复项。我可以看到复制品正在插入。有没有办法避免clickhouse表中的重复项?
CREATE TABLE sample.tmp_api_logs ( id UInt32, EventDate Date)
ENGINE = MergeTree(EventDate, id, (EventDate,id), 8192);
insert into sample.tmp_api_logs values(1,'2018-11-23'),(2,'2018-11-23');
insert into sample.tmp_api_logs values(1,'2018-11-23'),(2,'2018-11-23');
select * from 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条答案
按热度按时间siv3szwd1#
最有可能
ReplacingMergeTree
只要复制记录复制主键,就是您所需要的。你也可以试试其他的MergeTree
引擎在遇到复制记录时执行更多操作。FINAL
关键字可以在执行查询时使用,以确保唯一性。bvk5enib2#
如果原始数据不包含重复数据,并且它们可能仅在重试插入时出现,则replicatedmergetree中有一个重复数据消除功能。要使其正常工作,您应该重新插入完全相同的数据批(以相同顺序插入相同的行集)。您可以为这些重试使用不同的副本,并且数据块仍将仅插入一次,因为通过zookeeper在副本之间共享块哈希。
否则,您应该在插入clickhouse之前从外部消除重复数据,或者使用replacingmergetree或replicatedreplacingmergetree异步清除重复数据。