关于复制表重复数据无法写入,最近发现不少人在网上有问到,我这里进行一下讲解和演示。
关于问题有人去clickhouse中文社区问过,链接如下:
http://www.clickhouse.com.cn/topic/60dd3e737e8c564b014b5bc4
首先我们建一个表:
CREATE TABLE default.bbb (`aa` Float64, `bb` Float64, `cc` Int64, `dd` Int64, `ee` Int64, `create_at` DateTime) ENGINE = ReplicatedMergeTree('/clickhouse/tables/default.bbb/{shard}', '{replica}') PARTITION BY toYYYYMM(create_at) ORDER BY create_at SETTINGS index_granularity = 8192
然后我们开始往里面写数据,sql如下:
insert into default.bbb values(1.1,2.2,3,4,5,'2021-07-10 23:26:28')
上面的sql我执行10次,我们查数据发现数据还是只有一条,为什么呢?
经过一番查证,官方有个参数:insert_deduplicate,介绍是这么写的:
我把这个参数设置
set insert_deduplicate = 0
之后重新执行上面的插入操作,数据就成功写进去了。
我在github上面查到了一个issue,链接如下:
https://github.com/ClickHouse/ClickHouse/issues/3526,
这里有说到这个问题,并且告诉三种设置整个insert_deduplicate参数的三种方式:
至于为什么要这么设计,我看了另外一个issue,链接如下,大概意思是说真实业务场景不会出现重复写入。链接如下:
https://github.com/ClickHouse/ClickHouse/issues/20867,
同学们有兴趣自己看看。
这个坑,估计对新手来说,很多人都会遇到,写个文章,希望对大家有帮助。