clickhouse 引擎(clickhouse replacingmergetree)

作者:电脑培训网 2024-05-05 20:43:27 796

替换ClickHouse引擎的MergeTree

为什么会有ReplacingMergeTree

ReplacingMergeTree作用?

clickhouse 引擎(clickhouse replacingmergetree)

ClickHouse中最常用、最基础的表引擎是MergeTree。在其功能的基础上添加特定的功能就构成了MergeTree系列引擎。MergeTree支持主键,但主键主要用于缩小查询范围,没有唯一性约束。主键相同的数据可以正常写入。但在某些情况下,您可能需要表中没有重复主键的数据。ReplacingMergeTree为MergeTree添加了去重功能,但它只会在合并分区时删除重复数据,而在写入相同数据时不会引发异常。

使用方式

创建ReplacingMergeTree表与创建MergeTree类似,只是修改引擎。ReplacingMergeTree引擎创建规范为:ENGINE=ReplacingMergeTree([ver]),其中ver是可选参数。需要指定一个UInt8/UInt16、Date或DateTime类型的字段,它决定了数据去重时使用的算法。如果没有设置该参数,合并时保留组中最后一条数据;如果指定该参数,则保留ver字段值最大的行。

不指定ver参数

--在不指定ver参数的情况下创建表ReplacintMergeTree引擎CREATETABLErepla_merge_test(`id`String,`code`String,`create_time`DateTime)ENGINE=ReplacingMergeTree()PARTITIONBYtoYYYYMM(create_time)PRIMARYKEYidORDERBY(编号、代码)

ReplacingMergeTree将根据ORDERBY声明的表达式删除重复项。

--将数据插入到replace_merge_test值中('A000','code1',now()),('A000','code1','2020-07-2821:30:00'),('A001','code1',now()),('A001','code2','2020-07-2821:30:00'),('A0002','code2',now());--查询当前数据select*fromrepla_merge_test;idcodecreate_timeA000code12020-07-2821:23:48A000code12020-07-2821:30:00A0002代码22020-07-2821:23:48A001代码12020-07-2821:23:48A001代码22020-07-2821:30:00强制分区合并优化表replace_merge_testFINAL;--再次查询数据select*fromrepla_merge_test;idcodecreate_timeA000code12020-07-2821:30:00A0002code22020-07-2821:233336048A001代码12020-07-2821:23:48A001代码22020-07-2821:30:00

从上面的例子可以看出,id和code相同的字段“A000”和“code1”被去重后,只留下一条数据。由于建表时没有设置ver参数,因此组中最后一条数据被保留。

--再次使用insert插入一条数据insertinto到replace_merge_testvalues('A001','code1','2020-07-2821:30:00');--查询表中的数据select*fromreplac_merge_test;idcodecreate_timeA000code12020-07-2821:30:00A0002代码22020-07-2821:233:48A001代码12020-07-2821:23:48A001代码22020-07-2821:30:00id代码创建时间A001code12020-07-2821:30:00

可以看到,当再次插入重复数据时,查询中仍然会出现重复。在ClickHouse中,默认情况下,一次insert插入的数据在同一个数据分区,不同insert插入的数据在不同的分区。因此,ReplacingMergeTree会逐个分区进行重复数据删除,这意味着只有在同一数据分区内,重复数据才会被删除。只有这样才能删除数据。只有数据合并完成后,才能使用引擎功能进行重复数据删除。

指定ver参数

--创建一个指定ver参数的表ReplacingMergeTree引擎CREATETABLErepla_merge_ver_test(`id`String,`code`String,`create_time`DateTime)ENGINE=ReplacingMergeTree(create_time)PARTITIONBYtoYYYYMM(create_time)PRIMARYKEYidORDERBY(id,code)--插入测试数据插入到replace_merge_ver_test中value('A000','code1','2020-07-1021:35:30'),('A000','code1','2020-07-1521:35:30'),('A000','code1','2020-07-0521:35:30'),('A000','code1','2020-06-0521:35:30');--查询数据select*fromrepla_merge_ver_test;idcodecreate_timeA000code12020-06-0521:35:30idcode创建时间A000code12020-07-1021:35:30A000代码12020-07-1521:35:30A000代码12020-07-0521:35:30--强制分区合并优化表replace_merge_ver_testFINAL;--查询数据select*fromreplac_merge_ver_test;idcodecreate_timeA000code12020-07-1521:35:30idcodecreate_timeA000code12020-06-0521:35:30

由于上面创建的表是按照create_time的年月进行分区的,所以可以看出,ReplacingMergeTree不会对不同的数据分区进行去重,并且在同一个数据分区中,指定ver参数后,create_time中的同一组数据将会被保留。时间最长的数据行。

总结

使用ORDERBY排序键作为判断数据是否重复的唯一键

仅当分区合并时才会触发重复数据删除逻辑。

数据去重是基于数据分区的。只会删除同一数据分区中的重复数据,不同数据分区中的重复数据仍会保留。

数据去重时,可以找到相邻的重复数据,因为它已经基于ORDERBY排序了。

重复数据删除策略是:

如果指定ver参数,则重复数据中ver字段最大的行将被保留。

如果不指定ver参数,则保留重复数据中的最后一行数据。

相关推荐

  • 数据猫电脑培训学校校园情况,数据猫电脑培训中心

    数据猫电脑培训学校校园情况,数据猫电脑培训中心

    大家好,今天小编关注到一个比较有意思的话题,就是关于数据猫电脑培训学校校园情况的问题,于是小编就整理了4个相关介绍数据猫电脑培训学校校园情况的解答,让我们一起看…

    数据猫电脑培训学校校园情况,数据猫电脑培训中心 2024-09-25 03:25:26
  • 王老师电脑培训数据透视表,excel数据透视表培训

    王老师电脑培训数据透视表,excel数据透视表培训

    大家好,今天小编关注到一个比较有意思的话题,就是关于王老师电脑培训数据透视表的问题,于是小编就整理了4个相关介绍王老师电脑培训数据透视表的解答,让我们一起看看吧…

    王老师电脑培训数据透视表,excel数据透视表培训 2024-09-10 23:45:35
  • 电脑培训班数据编程,电脑编程培训班课程

    电脑培训班数据编程,电脑编程培训班课程

    大家好,今天小编关注到一个比较有意思的话题,就是关于电脑培训班数据编程的问题,于是小编就整理了3个相关介绍电脑培训班数据编程的解答,让我们一起看看吧。大数据培训…

    电脑培训班数据编程,电脑编程培训班课程 2024-09-04 17:52:18
  • 大数据电脑培训班,大数据电脑培训班

    大数据电脑培训班,大数据电脑培训班

    大家好,今天小编关注到一个比较有意思的话题,就是关于大数据电脑培训班的问题,于是小编就整理了3个相关介绍大数据电脑培训班的解答,让我们一起看看吧。大数据技术与应…

    大数据电脑培训班,大数据电脑培训班 2024-08-12 02:05:29
  • 电脑培训广西数据猫,玉林数据猫电脑培训

    电脑培训广西数据猫,玉林数据猫电脑培训

    大家好,今天小编关注到一个比较有意思的话题,就是关于电脑培训广西数据猫的问题,于是小编就整理了2个相关介绍电脑培训广西数据猫的解答,让我们一起看看吧。猫咪多久体…

    电脑培训广西数据猫,玉林数据猫电脑培训 2024-07-02 13:24:51