我创建了表并尝试多次插入值以检查重复项。我可以看到重复项正在插入。有没有办法避免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 ?
???????????????????
*/
Run Code Online (Sandbox Code Playgroud)
如果原始数据不包含重复项,并且它们可能仅在重试 INSERT INTO 期间出现,则Replicated MergeTree中有重复数据删除功能。为了使其工作,您应该重试插入完全相同批次的数据(同一顺序的同一组行)。您可以使用不同的副本进行这些重试,并且数据块仍将仅插入一次,因为块哈希通过 ZooKeeper 在副本之间共享。
否则,您应该在插入 ClickHouse 之前从外部删除重复数据,或者使用ReplacingMergeTree 或 ReplicatedReplacingMergeTree异步清理重复数据。
ReplacingMergeTree只要重复记录重复主键,很可能就是您所需要的。MergeTree当遇到复制记录时,您还可以尝试其他引擎以进行更多操作。FINAL查询时可以使用关键字来确保唯一性。
| 归档时间: |
|
| 查看次数: |
8104 次 |
| 最近记录: |