10 ClickHouseClickHouse合并树MergeTree家族表引擎之ReplacingMergeTree详细解析

目录

  • 建表语法
  • 数据处理策略
  • 资料分享
  • 参考文章
MergeTree拥有主键,但是它的主键却没有唯一键的约束 。这意味着即便多行数据的主键相同,它们还是能够被正常写入 。在某些使用场合,用户并不希望数据表中含有重复的数据 。ReplacingMergeTree就是在这种背景下为了数据去重而设计的,它能够在合并分区时删除重复的数据 。但是ReplacingMergeTree并不一定保证不会出现重复的数据 。
ReplacingMergeTree是另外一个常用的表引擎,ReplacingMergeTree和MergeTree的不同之处在于它会删除排序键值相同的重复项 。
数据的去重只会在数据合并期间进行 。合并会在后台一个不确定的时间进行,因此你无法预先作出计划 。有一些数据可能仍未被处理 。可以调用OPTIMIZE语句发起计划外的合并,但尽量不要依靠它,因为OPTIMIZE语句会引发对数据的大量读写 。
【10 ClickHouseClickHouse合并树MergeTree家族表引擎之ReplacingMergeTree详细解析】因此,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引擎的数据处理策略,主要是下面五个点 。
  1. 使用ORBER BY排序键作为判断重复数据的唯一键 。
  2. 只有在合并分区的时候才会触发删除重复数据的逻辑 。
  3. 以数据分区为单位删除重复数据 。当分区合并时,同一分区内的重复数据会被删除;不同分区之间的重复数据不会被删除 。
  4. 在进行数据去重时,因为分区内的数据已经基于ORBER BY进行了排序,所以能够找到那些相邻的重复数据 。
  5. 在数据合并的时候,ReplacingMergeTree 从所有具有相同排序键的行中选择一行留下:如果ver列未指定,保留最后一条 。如果ver列已指定,保留ver值最大的版本 。
资料分享ClickHouse经典中文文档分享
参考文章
  • 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详细解析

    经验总结扩展阅读