首页 > 其他分享 >客快物流大数据项目(九十三):ClickHouse的ReplacingMergeTree深入了解 ClickHouse清除重复数据

客快物流大数据项目(九十三):ClickHouse的ReplacingMergeTree深入了解 ClickHouse清除重复数据

时间:2024-03-29 23:34:54浏览次数:27  
标签:users 九十三 客快 ReplacingMergeTree tbl test 数据 id ClickHouse

ClickHouse的ReplacingMergeTree深入了解

为了解决MergeTree相同主键无法去重的问题ClickHouse提供了ReplacingMergeTree引擎,用来对主键重复的数据进行去重。

删除重复数据可以使用optimize命令手动执行,这个合并操作是在后台运行的,且无法预测具体的执行时间。

在使用optimize命令执行合并时,如果表数据量过大,会导致耗时很长,此时表将是不可用的,因为optimize会通过读取和写入大量数据来完成合并操作。

ReplacingMergeTree适合在后台清除重复数据以节省空间,但不能保证不存在重复数据。在没有彻底optimize之前,可能无法达到主键去重的效果,比如部分数据已经被去重,而另外一部分数据仍旧存在主键重复的情况。在分布式场景下,相同主键的数据可能被分片到不同节点上,不同分片间无法去重。ReplacingMergeTree更多的被用于确保数据最终被去重,而无法保证查询过程中主键不重复

一、创建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]
[PRIMARY KEY expr]
[SAMPLE BY expr]
[SETTINGS name=value, ...]

 

子句说明

使用方式

ver参数

ReplacingMergeTree([ver])中的ver参数是可选的,指带有版本的列,这个列允许使用UInt*、Date或DateTime类型。ReplacingMergeTree在合并时会把具有相同主键的所有行仅保留一个。如果不指定ver参数则保留最后一次插入的数据。

二、创建ReplacingMergeTree引擎的表

创建ReplacingMergeTree引擎的本地表tbl_test_replacing_mergetree_users

CREATE TABLE tbl_test_replacingmergetree_users (
    id UInt64, 
    email String, 
    username String, 
    gender UInt8, 
    birthday Date, 
    mobile FixedString(13), 
    pwd String, 
    regDT DateTime, 
    lastLoginDT DateTime, 
    lastLoginIP String
) ENGINE=ReplacingMergeTree(id) partition by toYYYYMMDD(regDT) order by id settings index_granularity=8192;

 

三、插入数据到ReplacingMergeTree引擎的表

插入数据到表tbl_test_replacingmergetree_users

使用SQL语句插入数据:

insert into tbl_test_replacingmergetree_users select * from tbl_test_mergetree_users where id<=5;

查询表中全量数据。

插入重复数据(使用lastLoginDT来区分数据插入的先后顺序):

insert into tbl_test_replacingmergetree_users(id,email,username,gender,birthday,mobile,pwd,regDT,lastLoginIP,lastLoginDT) select id,email,username,gender,birthday,mobile,pwd,regDT,lastLoginIP,now() as lastLoginDT from tbl_test_mergetree_users where id<=3;

再次查询表中全量数据:

select * from tbl_test_replacingmergetree_users order by id,lastLoginDT;

明显看到id是1、2、3的数据各有两条,说明目前已经存在3条重复数据,且新增的3条数据的lastLoginDT都是2019-12-04 14:55:56。

​编辑现在使用optimize命令执行合并操作,使表中主键id字段的重复数据由现在的6条变成3条:

optimize table tbl_test_replacingmergetree_users final;

 

再次查询

select * from tbl_test_replacingmergetree_users;

发现主键id字段为1、2、3的重复数据已经合并了,且合并后保留了最后一次插入的3条数据,因为最后插入的3条记录的时间是2019-12-04 14:55:56。

四、删除表

​​

drop table tbl_test_replacingmergetree_users;

标签:users,九十三,客快,ReplacingMergeTree,tbl,test,数据,id,ClickHouse
From: https://www.cnblogs.com/shan13936/p/18104845

相关文章

  • 客快物流大数据项目(八十二):Kudu的读写原理 一般有用 看1
    Kudu的读写原理一、​​​​​​​工作模式Kudu的工作模式如下图,有些在上面的内容中已经介绍了,这里简单标注一下:每个kudutable按照hash或range分区为多个tablet;每个tablet中包含一个MemRowSet以及多个DiskRowSet;每个DiskRowSet包含BaseData以及DeltaStores;Delta......
  • 客快物流大数据项目(四十二):Java代码操作Kudu
    Java代码操作Kudu一、构建maven工程二、导入依赖三、​​​​​​​创建包结构四、​​​​​​​初始化方法五、​​​​​​​创建表六、​​​​​​​插入数据七、​​​​​​​查询数据八、修改数据九、​​​​​​​删除数据十、​​​​​​​修改表十一、​......
  • 客快物流大数据项目(五十一):数据库表分析 物流项目 数据库表设计
    数据库表分析一、物流运输管理数据库表1、揽件表(tbl_collect_package)2、客户表(tbl_customer)3、物流系统码表(tbl_codes)4、快递单据表(tbl_express_bill)5、快递包裹表(tbl_express_package)​​​​​​​6、客户地址表(tbl_address)​​​​​​​7、客户寄件信息表(tbl_consumer......
  • 客快物流大数据项目(八十五):实时OLAP分析需求 一些组件的特点 一般有用 看1
    ​实时OLAP分析需求一、​​​​​​​背景介绍在之前的文章学习了离线数仓的构建,但是离线数仓的最大问题即:慢,数据无法实时的通过可视化页面展示出来,通常离线数仓分析的是“T+1”的数据,针对于时效性要求比较高的场景,则无法满足需求,例如:快速实时返回“分组+聚合计算+排序聚合指标......
  • 客快物流大数据项目(六十八):工作流调度 azkaban介绍及用法 一般有用 图片偏多 看1
    工作流调度一、工作流产生背景工作流(Workflow),指“业务过程的部分或整体在计算机应用环境下的自动化”。是对工作流程及其各操作步骤之间业务规则的抽象、概括描述。工作流解决的主要问题是:为了实现某个业务目标,利用计算机软件在多个参与者之间按某种预定规则自动传递文档、信息......
  • 客快物流大数据项目(六十二):主题及指标开发 common包下定义的一些内容 一般有用 看1
    主题及指标开发一、主题开发业务流程二、离线模块初始化1、创建包结构2、​​​​​​​创建时间处理工具3、​​​​​​​定义主题宽表及指标结果表的表名4、​​​​​​​物流字典码表数据类型定义枚举类5、​​​​​​​封装公共接口主题及指标开发一、主题开发业......
  • 客快物流大数据项目(八十一): Kudu原理 有用 看1
    ​Kudu原理一、表与schemaKudu设计是面向结构化存储的,因此Kudu的表需要用户在建表时定义它的Schema信息,这些Schema信息包含:列定义(含类型)PrimaryKey定义(用户指定的若干个列的有序组合)数据的唯一性,依赖于用户所提供的PrimaryKey中的Column组合的值的唯一性。Kudu提供了Alt......
  • 客快物流大数据项目(七十):Impala入门介绍 一般有用 看1
    Impala入门介绍一、impala基本介绍impala是cloudera提供的一款高效率的sql查询工具,提供实时的查询效果,官方测试性能比hive快10到100倍,其sql查询比sparkSQL还要更加快速,号称是当前大数据领域最快的查询sql工具,impala是参照谷歌的新三篇论文(Caffeine--网络搜索引擎、Pregel--分布......
  • 客快物流大数据项目(四十):ETL实现方案
    目录ETL实现方案一、ETL处理流程图二、为什么使用Kudu作为存储介质ETL实现方案一、​​​​​​​ETL处理流程图数据来源:来自于ogg同步到kafka的物流运输数据来自于canal同步到kafka的客户关系数据二、为什么使用Kudu作为存储介质数据库数据上的快速分析目前......
  • 客快物流大数据项目(一百):ClickHouse的使用 spark操作ClickHouse代码
    ClickHouse的使用一、使用Java操作ClickHouse1、构建maven工程2、​​​​​​​导入依赖<!--Clickhouse--><dependency><groupId>ru.yandex.clickhouse</groupId><artifactId>clickhouse-jdbc</artifactId><version>0.2.2</v......