当前位置:网站首页>clickhouse出现数据重复问题
clickhouse出现数据重复问题
2022-08-10 05:36:00 【yeah_you_are】
clickhouse出现数据重复问题排查
在生产环境中,偶然发现clickhouse数据表中出现重复数据,并且都是重复的两条数据,重重迷雾,疑窦重生…
建表语句如下:
CREATE TABLE test.baseinfo ( `id` String, `name` String, `update_time` Date ) ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/baseinfo/{shard}', '{replica}') PRIMARY KEY id ORDER BY id SETTINGS index_granularity = 8192
这里对语句做了修改,与真实数据有出入,但基本相似。
问题一:已经有‘primary key’,为什么可以重复?
clickhouse这里的主键只是用来生成一级索引的,并没有唯一性约束这样的语义,其主要的作用是提升查询性能的,并不做数据唯一性的限制。
问题二:建表中使用的引擎是ReplicatedMergeTree,为什么重复数据没有被移除?
根据官网的描述,引擎ReplicatedMergeTree和MergeTree的区别就是该引擎会删除排序键值相同的重复项,但是很明显这里并没有起作用,这是bug?并不是,首先,数据的去重只会在数据合并期间进行,而合并在后台进行的时间并不是确定的,因此此引擎并不保证没有重复数据的出现。另外一点,也是我这里出现重复数据的原因,是该引擎是依据排序键值进行判断重复数据并删除的,而排序 order by 是在分区 partition 内排序的,所以只有重复数据出现在同一分区才会被删除,而这里并没有自定义分区键。可以使用以下sql查看数据表的分区情况。
--从system.parts中查看数据表的分区信息 select partition,name,active from system.parts p where p.table = 'table_name'
所以因为我这里没有自定义分区键,导致重复数据写入了不同的分区,所以重复数据并没有被删除。
问题三:将数据写入CH的代码有问题吗?为什么会写入重复数据?
这里的数据是从KAFKA中消费而来,写入到ClickHouse中的。于是我开始在本地测试代码,将测试数据写入到CH中,经过查询发现,数据只有一条!!!!!这说明代码将数据写入并没出现问题,并不会将一条数据写入两次。然后我再次启动程序,查询CH,出鬼了!!!每条数据都有重复!而且都是两条!于是我就彻底陷入了迷雾,到底问题出在哪???
经过思考和搜索资料,意识到问题的关键是两条,每一条都是两条,于是我果断停掉了程序,然后继续消费KAFKA中的数据,但是不写入CH,只打印出来,查询数据表后,果然,终于抓到了,这边停止将数据写入CH,但是这条数据却出现在了CH中,有另一个我不知道的程序在偷摸摸的将数据导入到CH!!!终于真相大白了!
每天进步一点点,终会积沙成塔!
边栏推荐
- 探究乱码问题的本源:GBK,UTF8,UTF16,UTF8BOM,ASN1之间的关联
- PyTorch之训练技巧
- 常用模块封装-csv文件操作封装
- pytorch-10. Convolutional Neural Networks (homework)
- 解决错误 Could not find method leftShift() for arguments
- 以STM32F103C6TA为例通过配置CubeMX实现GPIO输出完成点灯实例
- Flutter的生命周期
- ASP.NET有关于文件上传、下载、全选、删除选中重要干货(亲测有效)
- 51单片机BH1750智能补光灯台灯光强光照恒流源LED控制系统
- LeetCode 2011. Variable Value After Action (Simple)
猜你喜欢
详解 Hough 变换(上)基本原理与直线检测
Common class String overview
在Unity中利用代码动态更改场景中的天空盒
电路建模的要点
LeetCode 2011.执行操作后的变量值(简单)
LeetCode 292. Nim Game (Simple)
开源游戏服务器框架NoahGameFrame(NF)服务器端环境搭建(二)
LeetCode 292.Nim 游戏(简单)
详解样条曲线(上)(包含贝塞尔曲线)
LeetCode refers to the offer 21. Adjust the order of the array so that the odd numbers are in front of the even numbers (simple)
随机推荐
STM32F407ZG TIM通用定时器
【从零设计 LaTex 模板】1. 一些基础知识
Deep learning TensorFlow entry environment configuration
STM32F407ZG GPIO输出相关实验
剑指 Offer(第 2 版)7/5 5-8
【图像识别】训练一个最最简单的AI使其识别Vtuber
ASP.NET连接SQL Server的步骤
LeetCode 292.Nim 游戏(简单)
新建STM32F407ZG Keil5项目
51单片机RS485远程双机多机温度采集主从机多节点蜂鸣器报警
LeetCode 1894.找到需要补充粉笔的学生编号
mysql分组排序并取各分组前几个数据
LeetCode 938. Range Sum of Binary Search Trees (Simple)
STM32单片机RGB红蓝调光植物补光系统红光蓝光PWM调色调节亮度
【简易笔记】PyTorch官方教程简易笔记 EP2
I don't like my code
电池级碳酸锂除杂质钙镁离子工艺原理
开源游戏服务器框架NoahGameFrame(NF)服务器端环境搭建(二)
详解 Hough 变换(上)基本原理与直线检测
作为测试,常用的adb命令