首页  

clickhouse ReplacingMergeTree     所属分类 clickhouse 浏览量 323
MergeTree支持主键,只索引 ,不具备唯一性约束 
ReplacingMergeTree 在 MergeTree的基础上加入了去重的功能
但它仅会在合并分区时,删除重复的数据 
可使用 ReplacingMergeTree 更新数据

ENGINE = ReplacingMergeTree([ver])
ver为选填参数,指定一个UInt8/UInt16、Date或DateTime类型的字段,指定数据去重时所用的算法
如果没有设置该参数,合并时保留分组内的最后一条数据
如果指定该参数,则保留ver字段取值最大的那一行

CREATE TABLE replac_merge_test(
        `id` String, 
        `code` String, 
        `create_time` DateTime
)
ENGINE = ReplacingMergeTree()
PARTITION BY toYYYYMM(create_time)
PRIMARY KEY id
ORDER BY (id, code)

ORDER BY  相当于关系数据库的主键  可用于去重更新 (同一分区内唯一)
PRIMARY KEY  用于建立索引 ,叫主索引更合适
不指定 PRIMARY KEY ,使用 ORDER BY 设置


使用ORDER BY排序,数据去重
分区合并时,才会去重
同一个数据分区的重复数据才会被删除 
数据去重时,由于已经基于ORDER BY排序,可以找到相邻的重复数据

数据去重策略
指定了ver参数,保留ver字段最大的那一行
未指定ver参数,保留重复数据中最后一行数据


指定ver参数 
CREATE TABLE replac_merge_ver_test(
        `id` String, 
        `code` String, 
        `create_time` DateTime
)
    ENGINE = ReplacingMergeTree(create_time)
    PARTITION BY toYYYYMM(create_time)
    PRIMARY KEY id
    ORDER BY (id, code)
    
插入测试数据
insert into replac_merge_ver_test values('A000', 'code1', '2020-07-10 21:35:30'),('A000', 'code1', '2020-07-15 21:35:30'),('A000', 'code1', '2020-07-05 21:35:30'),('A000', 'code1', '2020-06-05 21:35:30');
    
查询数据
select * from replac_merge_ver_test;

A000 │ code1 │ 2020-06-05 21:35:30 │

A000 │ code1 │ 2020-07-10 21:35:30 │
A000 │ code1 │ 2020-07-15 21:35:30 │
A000 │ code1 │ 2020-07-05 21:35:30 │
    
强制进行分区合并
optimize table replac_merge_ver_test FINAL;
    
查询数据
select * from replac_merge_ver_test;
A000 │ code1 │ 2020-07-15 21:35:30 │
A000 │ code1 │ 2020-06-05 21:35:30 │

上一篇     下一篇
《就业、利息和货币通论》笔记

《资本论》笔记

大萧条的一些特点

clickhouse MergeTree 写入与查询

clickhouse MergeTree 存储结构

clickhouse核心知识点