ClickHouse(10)ClickHouse合并树MergeTree家族表引擎之ReplacingMergeTree详细解析
MergeTree拥有主键,但是它的主键却没有唯一键的约束。这意味着即便多行数据的主键相同,它们还是能够被正常写入。在某些使用场合,用户并不希望数据表中含有重复的数据。ReplacingMergeTree就是在这种背景下为了数据去重而设计的,它能够在合并分区时删除重复的数据。但是ReplacingMergeTree并不一定保证不会出现重复的数据。
ReplacingMergeTree是另外一个常用的表引擎,ReplacingMergeTree和MergeTree的不同之处在于它会删除排序键值相同的重复项。
数据的去重只会在数据合并期间进行。合并会在后台一个不确定的时间进行,因此你无法预先作出计划。有一些数据可能仍未被处理。可以调用OPTIMIZE语句发起计划外的合并,但尽量不要依靠它,因为OPTIMIZE语句会引发对数据的大量读写。
因此,ReplacingMergeTree适用于在后台清除重复的数据以节省空间,但是它不保证没有重复的数据出现。
建表语法
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2],
...
) ENGINE = ReplacingMergeTree([ver])
[PARTITION BY expr]
[ORDER BY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...]
创建ReplacingMergeTree表的参数中,与MergeTree不同的是[ver]。ver(版本列)。类可以型为UInt*,Date或DateTime。这个属于可选参数,所以你也可以不用指定。
在数据合并的时候,ReplacingMergeTree 从所有具有相同排序键的行中选择一行留下:如果ver列未指定,保留最后一条。如果ver列已指定,保留ver值最大的版本。
其他的与MergeTree表是一致,它属于MergeTree表的的一个变种。
MergeTree表引擎的解析可以参考ClickHouse(09)ClickHouse合并树MergeTree家族表引擎之MergeTree详细解析
数据处理策略
最后总结一下ReplacingMergeTree引擎的数据处理策略,主要是下面五个点。
- 使用ORBER BY排序键作为判断重复数据的唯一键。
- 只有在合并分区的时候才会触发删除重复数据的逻辑。
- 以数据分区为单位删除重复数据。当分区合并时,同一分区内的重复数据会被删除;不同分区之间的重复数据不会被删除。
- 在进行数据去重时,因为分区内的数据已经基于ORBER BY进行了排序,所以能够找到那些相邻的重复数据。
- 在数据合并的时候,ReplacingMergeTree 从所有具有相同排序键的行中选择一行留下:如果ver列未指定,保留最后一条。如果ver列已指定,保留ver值最大的版本。
资料分享
参考文章
- ClickHouse(01)什么是ClickHouse,ClickHouse适用于什么场景
- ClickHouse(02)ClickHouse架构设计介绍概述与ClickHouse数据分片设计
- ClickHouse(03)ClickHouse怎么安装和部署
- ClickHouse(04)如何搭建ClickHouse集群
- ClickHouse(05)ClickHouse数据类型详解
- ClickHouse(06)ClickHouse建表语句DDL详细解析
- ClickHouse(07)ClickHouse数据库引擎解析
- ClickHouse(08)ClickHouse表引擎概况
- ClickHouse(09)ClickHouse合并树MergeTree家族表引擎之MergeTree详细解析
- ClickHouse(10)ClickHouse合并树MergeTree家族表引擎之ReplacingMergeTree详细解析
- ClickHouse(11)ClickHouse合并树MergeTree家族表引擎之SummingMergeTree详细解析
相关文章
- LeetCode笔记:219. Contains Duplicate II
- LeetCode笔记:223. Rectangle Area
- Redis 之布隆过滤器与布谷鸟过滤器
- Redis及其C库Hiredis的使用和封装
- 2021戈登贝尔奖揭晓!中国超算应用一举夺冠,打破谷歌所谓“量子霸权”!
- NeurIPS 2021 | 旷视提出:空间集成 ——一种新颖的模型平滑机制
- 上海交通大学过敏意:面向城市治理的图智能分析框架
- 做驴转录组数据然后脑袋被驴踢了搞出来几万个差异
- 台湾地区肝癌患者的甲基化水平异常
- 软件成本估算流程详解及案例分享【国内行业规范-NESMA】
- 配对肝癌病人的拷贝数变异数据揭示癌症相关基因
- 小鼠免疫微环境分析方法调研
- B细胞可分泌GABA需要单细胞数据证明
- MySQL数据库,详解游标使用(一)
- 甲基化捕获测序能否替代450K
- 学徒单细胞作业:敲除Dnmt1基因对小鼠肺部发育的影响
- CCLE数据库也单细胞转录组数据啦
- LeetCode刷题实战438:找到字符串中所有字母异位词
- 发现一款好用到爆的数据库工具,被惊艳到了!
- Flink重点难点:状态(Checkpoint和Savepoint)容错与两阶段提交