学习ReplacingMergeTree引擎,首先你得了解clickhouse的MergeTree引擎,因为ReplacingMergeTree引擎是MergeTree引擎的一个扩展版引擎,他拥有和MergeTree一样的功能,同时新增了一个删除相同主键数据的功能。
我们知道,clickhouse的MergeTree引擎,是clickhouse众多引擎中,号称性能最好的一个引擎,但他只能按照分区删除数据,所以有些场景很难满足,或者说比较麻烦,不优雅,举个实际的例子:
比如有个系统,他的数据不是实时的,比如今天的数据,明天看会比今天多,后天看会比明天多,但你需要在你的系统中定时同步他的数据到clickhouse,
这种情况用MergeTree可以勉强实现,那就是把每天相同主键的数据都保存一条,查询的时候,只取最新的一条。但这个需要写sql解决,而且一旦查询复杂,设计到数据合并等,sql就会变的很复杂,查询效率也会降低,而且每天的数据都会重复保存,数据重复太多,量太大。
所以针对这种情况,我们可以考虑用clickhouse的ReplacingMergeTree引擎,这个引擎自动帮你筛选出来最新的一条数据,并删掉之前重复的数据。类似于mongo的updateOne,先增后删。

建表:

我们新建一个表replacing_test,用ReplacingMergeTree引擎,date作为分区键,id和name作为联合主键,point可以理解为版本号。
value就是你实际业务要的值,我们用数字类型举例。

create table replacing_test (date Date, id UInt8, name String, value UInt16, point DateTime)
ENGINE= ReplacingMergeTree(date, (id, name), 8192,point);

这个表,相同id-name的数据,最终只会留下一条,具体留下哪一条,是由不同的point决定的。

插入测试数据

看下面的代码,我们循环插入9*9=81条数据,联合主键只有id在变,name暂时只是字符串b

    public static void main(String[] args) throws SQLException {for (int i = 1;i<10;i++){for (int j = 1;j<10;j++) {int v = j+i+100;String sql = "insert into replacing_test values ('2019-12-16', "+j+", 'b',"+v+", " + System.currentTimeMillis()/1000 + ");";System.out.println(sql+"_i="+i+"_j="+j);executeSql(sql);}}}private static void executeSql(String sql) throws SQLException {ClickHouseProperties properties = new ClickHouseProperties();ClickHouseDataSource dataSource = new ClickHouseDataSource("jdbc:clickhouse://clickhouse的ip:8123/default", properties);ClickHouseConnection connection = dataSource.getConnection();ClickHouseStatement statement = connection.createStatement();boolean execute = statement.execute(sql);}

结果

我们看到,最终数据库只有11条数据,说明大部分相同主键的数据都被删除了,但还是有两条数据是重复的,分别是id为8和9的。
这个就是官网所说的,他的这个删除重复数据,并不是一插入就删的,而且在Merge的时候才会删,原话是:
数据的去重只会在合并的过程中出现。合并会在未知的时间在后台进行,因此你无法预先作出计划。
所以说,这个引擎是一个类似于最终一致性的机制,估计是为了性能,把删除的逻辑做成了异步。

解决重复:

其实这种也是可以解决的,如果不是很在意性能的话,可以手动执行一个sql去触发他的Merge就好了,sql如下:

optimize table replacing_test;

执行完再看结果,这个就对了。每个id-name为主键的数据只有最后一条。

clickhouse的ReplacingMergeTree引擎实战相关推荐

  1. clickhouse MergeTree系列引擎

    在所有的表引擎中,最为核心的当属MergeTree系列表引擎,这些表引擎拥有最为强大的性能和最广泛的使用场合.对于非MergeTree系列的其他引擎而言,主要用于特殊用途,场景相对有限.而MergeT ...

  2. 大数据—— Clickhouse 介绍与引擎的使用

    一.Clickhouse 介绍 1.1 Clickhouse 介绍 ClickHouse 是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS).最初 是一款名为 Yandex.Metrica ...

  3. Clickhouse基于物化引擎(MaterializedMySQL)来同步mysql

    创建ClickHouse数据库,包含MySQL中所有的表,以及这些表中的所有数据. ClickHouse服务器作为MySQL副本工作.它读取binlog并执行DDL和DML查询 语法: CREATE ...

  4. 【clickhouse】Clickhouse的MySQL引擎同步数据不准确 Decimal

    文章目录 1.概述 2. 场景2 2.1 概述 1.概述 我想从MySQL同步数据到Clickhouse,但是发现Clickhouse的MySQL引擎同步数据不准确,精度丢失而且还是不对的.(很多数据 ...

  5. 【clickhouse】MergeTree引擎的固定/自适应索引粒度

    文章目录 1.概述 2.固定索引粒度 3.自适应索引粒度 1.概述 转载:聊聊ClickHouse MergeTree引擎的固定/自适应索引粒度 我们在刚开始学习ClickHouse的MergeTre ...

  6. SMARTS决策引擎实战练习

    SMARTS决策引擎实战练习 以准入规则为例,本练习将从规则梳理开始,介绍如何通过SMARTS决策引擎实现规则配置的流程与步骤. 通过本练习,用户将熟悉SMARTS的项目创建,表单.决策.文档组的创建 ...

  7. ClickHouse之mysql引擎

    我们想数据存入mysql的时候,能向clickhouse中也存一份,方便后期的查询 那么clickhouse的mysql引擎完美支持 我们先来想几个问题: 1.我的mysql数据库中,user表已经存 ...

  8. EFK升级到ClickHouse的日志存储实战

    0.背景 唯品会日志系统dragonfly 1.0是基于EFK构建,于2014年服务至今已长达7年,支持物理机日志采集,容器日志采集,特殊分类日志综合采集等,大大方便了全公司日志的存储和查询. 随着公 ...

  9. 客快物流大数据项目(九十一):ClickHouse的数据库引擎

    ​​​​​​​ 文章目录 ClickHouse的数据库引擎 一.MySQL引擎 ClickHouse的数据库引擎 ClickHouse提供了本机.M

最新文章

  1. 为什么不推荐使用BeanUtils属性转换工具
  2. head tail mkdir cp
  3. python类介绍_python类介绍
  4. python dump函数_python 处理 json 四个函数dumps、loads、dump、load的区别
  5. Typescript尝试
  6. 计算机网上作业系统论文,网上作业提交系统的设计与实现
  7. linux如何批量导出文件格式,Linux下批量将md文件转换为html文件
  8. 线段树 + 字符串Hash - Codeforces 580E Kefa and Watch
  9. pandas时间处理操作
  10. 地铁 java_怎么用Java编写一个地铁售票机的程序?
  11. 第三天.SQL语言基础
  12. express 设置handlebars模板引擎
  13. led数字字体_led电视质量排行榜
  14. MSM8260,OMAP4430,TEGRA2,EXYNOS 4210详细分析
  15. Spring| Spring中的动态代理配置(aspectj-autoproxy属性介绍)
  16. js二维码样式生成插件easy.qrcode.js
  17. 虚拟服务器的磁盘合并,磁盘管理怎么合并分区
  18. 查找list中重复数据
  19. 智慧电厂拥抱“双碳”,空冷岛设施数字化转型
  20. google网页翻译使用不了的解决方案

热门文章

  1. 使网页成黑白色调的滤镜(转)
  2. word 2013 标题设置多级列表
  3. 《构建之法》 读书笔记(4)
  4. HTML5 音频视频
  5. 文件夹查找文件(一个文件夹文件查找函数 Delphi)
  6. 剖析云平台中的“共享型数据库”
  7. 计算机网络学习笔记-01-概念,组成,功能,分类
  8. 查看屏幕大小_疑似“iPhone 12” 的OLED屏幕组件泄露
  9. 计算机基本网络测试命令实验报告,网络连通性测试与网络命令验证实验报告
  10. php 判断不是文件类型,php 判断文件类型