前言
插件及服务器版本
服务器:ubuntu 16.04
ClickHouse:20.9.3.45
虽然MergeTree拥有主键,但是它的主键没有唯一键的约束,这就意味着即便多行数据的主键相同,它们还是能够被正常写入。这里如果需要去重,可以使用ReplacingMergeTree,它能够在合并分区时删除重复的数据,但是只能对同一分区的数据去重,且去重依据是order by排序键
create table replace_test(
id String,
code String,
create_time DateTime
)ENGINE = ReplacingMergeTree()
PARTITION BY toYYYYMM(create_time)
ORDER BY (id,code)
PRIMARY key id;
insert into replace_test values ('1','tracy','2020-12-17 21:18:00');
insert into replace_test values ('1','tracy','2020-12-17 21:19:00');
insert into replace_test values ('1','tracy','2020-12-17 21:20:00');
insert into replace_test values ('2','monica','2020-12-17 21:18:00');
insert into replace_test values ('2','monica','2020-12-17 21:19:00');
optimize table replace_test final;
这里可以看到表内数据确实做了去重
在表里再插入一条id为1,code为tiger的记录
insert into replace_test values ('1','tiger','2020-12-17 21:18:00');
这里可以看到,去重依据是order by的排序键,即使设置了primary key
insert into replace_test values ('1','tracy','2020-11-17 21:18:00');
这里可以看到,不同分区的数据是不同去重的
create table replace_test_version(
id String,
code String,
create_time DateTime
)ENGINE = ReplacingMergeTree(create_time)
PARTITION BY toYYYYMM(create_time)
ORDER BY (id,code);
insert into replace_test_version values ('1','tracy','2020-11-17 21:18:00');
insert into replace_test_version values ('1','tracy','2020-12-17 21:20:00');
insert into replace_test_version values ('1','tracy','2020-12-17 21:19:00');
这里可以看到,去重保留日期最新的一条
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://gaokaiyang.blog.csdn.net/article/details/111334570
内容来源于网络,如有侵权,请联系作者删除!