简介
该引擎和MergeTree的不同之处在于它会删除具有相同主键的重复项。
在数据合并的时候会对主键进行去重,合并会在后台执行,执行时间未知,因此你无法预先做出计划,当然你也可以调用OPTIMIZE语句来发起合并计划,但是这种方式是不推荐的,因为OPTIMIZE语句会引发大量的读写请求。
建表语句
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, ...]
- ENGINE:引擎名和参数。
- ver:版本列,类型可以是UInt*,Date,或者DateTime,可选择的参数。 合并的时候ReplacingMergeTree从相同的主键中选择一行保留,如果ver列未指定,则选择最后一条,如果ver列已指定,则选择ver值最大的版本。
- PARTITION BY:分区键。要按月分区,可以使用表达式 toYYYYMM(date_column) ,这里的 date_column 是一个 Date 类型的列。这里该分区名格式会是 "YYYYMM" 这样。
- ORDER BY: 表的排序键。可以是一组列或任意的表达式。 例如: ORDER BY (CounterID, EventDate) 。
- SAMPLE BY : 抽样的表达式。如果要用抽样表达式,主键中必须包含这个表达式。例如: SAMPLE BY intHash32(UserID) ORDER BY (CounterID, EventDate, intHash32(UserID)) 。
- SETTINGS : 影响 MergeTree 性能的额外参数:
- index_granularity 索引粒度。即索引中相邻『标记』间的数据行数。默认值,8192 。该列表中所有可用的参数可以从这里查看 MergeTreeSettings.h 。
- use_minimalistic_part_header_in_zookeeper — 数据片段头在 ZooKeeper 中的存储方式。如果设置了 use_minimalistic_part_header_in_zookeeper=1,ZooKeeper 会存储更少的数据。
- min_merge_bytes_to_use_direct_io 使用直接 I/O 来操作磁盘的合并操作时要求的最小数据量。合并数据片段时,ClickHouse 会计算要被合并的所有数据的总存储空间。如果大小超过了 min_merge_bytes_to_use_direct_io 设置的字节数,则 ClickHouse 将使用直接 I/O 接口(O_DIRECT 选项)对磁盘读写。如果设置 min_merge_bytes_to_use_direct_io = 0 ,则会禁用直接 I/O。默认值:10 * 1024 * 1024 * 1024 字节。
以上为建表参数描述,和MergeTree 相同,ver参数是本章重点。
Example
#测试建表语句 CREATE TABLE default.ReplacingMergeTreeTest ( id UInt8, age UInt8, name String ) ENGINE = ReplacingMergeTree(age) PARTITION BY id ORDER BY id
#插入数据 insert into default.ReplacingMergeTreeTest(id,age,name) values(1,25,'张三'); insert into default.ReplacingMergeTreeTest(id,age,name) values(1,22,'李四');
就不等它了,手动OPTIMIZE下。
OPTIMIZE TABLE default.ReplacingMergeTreeTest;
OPTIMIZE后
以上内容就是ReplacingMergeTree引擎相关介绍。
转自:https://kknews.cc/code/mrly386.html