ClickHouse插入数据重复

ClickHouse插入数据重复,第1张

ClickHouse插入数据重复

使用spark,多线程写入clickhouse

第一次建表时设置ENGINE = MergeTree,PARTITION BY和ORDER BY字段相同。
最终表中的数据发生重复。

CREATE TABLE dev.test_risk_full
(
)
ENGINE = MergeTree
PARTITION BY ORGCD
ORDER BY ID
SETTINGS index_granularity = 8192;

第二次建表时,设置如下,发现虽然无重复数据,但是数据插入速度下降明显

CREATE TABLE dev.test_risk_full
(
)
ENGINE = ReplaceMergeTree
PRIMARY KEY ID
PARTITION BY ORGCD2
ORDER BY ID
SETTINGS index_granularity = 8192;

查看资料后,了解到
PRIMARY KEY指定的字段是用来创建一级索引,不具有唯一约束性;

PARTITION BY指定的字段是用来进行分区

ORDER BY指定的字段是对分区内数据进行排序,在ReplaceMergeTree引擎下,会对相邻的重复数据进行删除

ClickHouse MergeTree的分区目录和其他数据库有所不同。MergeTree的分区目录不是在数据表被创建时生成,而是伴随着每一次的数据写入(INSERT INTO)都会生成一份分区目录。在数据导入完成后,ClickHouse通过后台任务将属于相同分区的多个目录合并成一个新的目录。已经存在的旧分区目录不会立即删除,而是在之后的某个时刻通过后台任务被删除(默认设置是8分钟)。

之前用的Hive、Hbase数据库在建表时会定义好分区目录,每次写入的数据会依据分区字段追加到不同的分区中。

暂时没研究明白导致数据重复的原因…

参考资料:
spark数据写入clickhouse mergeTree引擎 数据重复问题
https://blog.csdn.net/subian1261/article/details/115691273

clickhouse分区目录的合并过程原理
https://blog.csdn.net/u011110301/article/details/116600323

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5704824.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存