|NO.Z.00015|——————————|BigDataEnd|——|Hadoop&OLAP_ClickHouse.V12|——|ClickHouse.v12|MergeTree家族表引擎|ReplacingMergeTree|

一、MergeTree家族表引擎:MergeTree家族表引擎
### --- ReplacingMergeTree

~~~     这个引擎是在 MergeTree 的基础上,添加了“处理重复数据”的功能,
~~~     该引擎和MergeTree的不同之处在于它会删除具有相同主键的重复项。
### --- 特点:

~~~     使用ORDER BY排序键作为判断重复的唯一键
~~~     数据的去重只会在合并的过程中触发
~~~     以数据分区为单位删除重复数据,不同分区的的重复数据不会被删除
~~~     找到重复数据的方式依赖数据已经ORDER BY排好序了
~~~     如果没有ver版本号,则保留重复数据的最后一行
~~~     如果设置了ver版本号,则保留重复数据中ver版本号最大的数据
### --- 格式:

~~~     ENGINE [=] ReplacingMergeTree(date-column [, sampling_expression], (primary, key), 
~~~     index_granularity, [ver])可以看出他比MergeTree只多了一个ver,这个ver指代版本列。
二、ReplacingMergeTree案例
### --- 案例:创建表并导入数据

~~~     # 创建表
hadoop01 :) create table replace_table( id String, code String, create_time DateTime )ENGINE=ReplacingMergeTree() PARTITION BY toYYYYMM(create_time) ORDER BY (id,code) PRIMARY KEY id;

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

Ok.
~~~     # 导入数据

hadoop01 :) insert into replace_table values('A001','C1','2021-11-01 08:00:00');
hadoop01 :) insert into replace_table values('A001','C1','2021-11-02 08:00:00');
hadoop01 :) insert into replace_table values('A001','C8','2021-11-03 08:00:00');
hadoop01 :) insert into replace_table values('A001','C9','2021-11-04 08:00:00');
hadoop01 :) insert into replace_table values('A002','C2','2021-11-05 08:00:00');
hadoop01 :) insert into replace_table values('A003','C3','2021-11-06 08:00:00');
### --- optimize强制触发:

~~~     # 通过观察,去重是根据ORDER BY来的,并非PRIMARY KEY
hadoop01 :) SELECT * FROM replace_table ;

┌─id───┬─code─┬─────────create_time─┐
│ A001 │ C12021-11-02 08:00:00 │
│ A001 │ C82021-11-03 08:00:00 │
│ A001 │ C92021-11-04 08:00:00 │
│ A002 │ C22021-11-05 08:00:00 │
└──────┴──────┴─────────────────────┘
┌─id───┬─code─┬─────────create_time─┐
│ A003 │ C32021-11-06 08:00:00 │
└──────┴──────┴─────────────────────┘
┌─id───┬─code─┬─────────create_time─┐
│ A001 │ C12021-11-01 08:00:00 │
└──────┴──────┴─────────────────────┘
### --- 在继续插入一条数据:

~~~     # 继续插入一条数据
hadoop01 :) insert into replace_table values('A001','C1','2021-10-21 08:00:00');
~~~     # 合并数据
hadoop01 :) OPTIMIZE TABLE replace_table;

~~~     # 查看表分区情况:通过观察,不同分区的数据不会去重。
hadoop01 :) select * from replace_table;

┌─id───┬─code─┬─────────create_time─┐
 A001  C1    2021-10-21 08:00:00 
└──────┴──────┴─────────────────────┘
┌─id───┬─code─┬─────────create_time─┐
 A001  C1    2021-11-01 08:00:00 
 A001  C8    2021-11-03 08:00:00 
 A001  C9    2021-11-04 08:00:00 
 A002  C2    2021-11-05 08:00:00 
 A003  C3    2021-11-06 08:00:00 
└──────┴──────┴─────────────────────┘

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on   yanqi_vip  阅读(25)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示