当前位置:网站首页>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 refers to the offer 21. Adjust the order of the array so that the odd numbers are in front of the even numbers (simple)

卷积神经网络(CNN)实现服装图像分类

详解 Hough 变换(上)基本原理与直线检测

LeetCode 292. Nim Game (Simple)

51单片机智能远程遥控温控PWM电风扇系统红外遥控温度速度定时关机

【从零设计 LaTex 模板】1. 一些基础知识

Unity中实现Animation Clip动画片段的倒播(该案例可以防止动画延迟)

【fiddler2】使用fiddler mock response 数据

每日刷题(day01)——leetcode 53. 最大子数组和

C#对MySQL数据库进行增删改查操作(该操作还有防止MySQL注入功能)
随机推荐
51单片机BH1750智能补光灯台灯光强光照恒流源LED控制系统
STM32F407ZG GPIO输入相关实验
Radon 变换原理和应用
Gradle学习(二)Groovy
【C语言】结构体变量学习笔记1
Common class String overview
除砷树脂吸附原理
Linux的文件IO与标准IO,以及IO缓存
51单片机AD590温度测量ADC0832运放2.73V减法电压变换
STM32单片机LORA无线远程火灾报警监控系统DS18B20MQ2火焰检测
深度学习阶段性报告(一)
电池级碳酸氢锂除杂质钙镁离子工艺原理
钴镍回收树脂的工艺原理
LeetCode Interview Question 17.14 Minimum k Number (Moderate)
LeetCode 100.相同的树(简单)
【简易笔记】PyTorch官方教程简易笔记 EP1
【图像识别】训练一个最最简单的AI使其识别Vtuber
Notes for SVM
51单片机ST188手持人体温度脉搏心率测量仪锂电池充电
mkfs.minix.c之minix_super_block.s_nzones获取解析