概要
mysql的bigint20长度是十进制的,clickhouse的Int32的长度是二进制的。
背景
因为当前公司的数据量从百万每天陡增到十几亿,所以之前老的数据处理程序承载不下,重新搭建了一套新的大数据架构。在给公司从0到1搭建数据集群的过程中,有一个需求需要定时将一个MySQL的表更新导入到clickhouse中。结果发现唯一ID在导入过程中变成了负数。对于这个字段的定义中:
mysql 是bigint20
clickhouse 是Int32
看上去clickhouse这个字段占用的空间大于mysql中的定义长度,不应该出现数据超长乱码的问题。
原因:
mysql 的bigint20 的数据范围是 (-10000000000000000000 到 10000000000000000000 -1)
clickhouse的Int32的数据范围是 (-2147483647 到 2147483648)
解决方案
将clickhouse的字段长度增大
结果
成功解决问题
在数据量从百万激增至十几亿后,原有MySQL到ClickHouse的数据同步出现唯一ID变为负数的问题。原因是MySQL的bigint20字段在导入ClickHouse的Int32字段时超出范围。MySQL的bigint20可存储从-10^19到10^19-1的数,而ClickHouse的Int32则在-2^31到2^31之间。解决办法是扩大ClickHouse字段长度,最终成功解决了问题。
4万+

被折叠的 条评论
为什么被折叠?



