当前位置:网站首页>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!!!终于真相大白了!
每天进步一点点,终会积沙成塔!
边栏推荐
猜你喜欢

LeetCode 94. Inorder Traversal of Binary Trees (Simple)

STC12C5A60S2单片机WIFI信号扫描报警监视系统信号增强信号过低报警

51单片机AD590温度测量ADC0832运放2.73V减法电压变换

2022李宏毅机器学习hw1--COVID-19 Cases Prediction

LeetCode 1894.找到需要补充粉笔的学生编号

STM32单片机RGB红蓝调光植物补光系统红光蓝光PWM调色调节亮度

Notes for Netual Network

pytorch-10. Convolutional Neural Networks

LeetCode 1351. Counting Negative Numbers in Ordered Matrices (Simple)

【fiddler2】使用fiddler mock response 数据
随机推荐
GC0053-STM32单片机NTC热敏电阻温度采集及控制LCD1602
LeetCode 1894.找到需要补充粉笔的学生编号
解析树字符串并输出中序遍历
PyTorch的安装与基础知识
51单片机BH1750智能补光灯台灯光强光照恒流源LED控制系统
电池级碳酸锂除杂质钙镁离子工艺原理
Gradle学习 (一) 入门
PyTorch之CV
STM32单片机LORA无线远程火灾报警监控系统DS18B20MQ2火焰检测
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)
Notes for Netual Network
LeetCode 162. Finding Peaks (Moderate)
PyTorch之模型定义
Tensorflow 2.0 使用流程详解
LeetCode 2011.执行操作后的变量值(简单)
在Unity中利用代码动态更改场景中的天空盒
【图像识别】训练一个最最简单的AI使其识别Vtuber
优先级队列,大小顶堆PriorityQueue
以STM32F103C6TA为例通过配置CubeMX实现GPIO输出完成点灯实例
碳酸锂、碳酸氢锂溶液除钙镁离子工艺原理