前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >剖析-clickhouse的复制表引擎重复数据无法写入问题

剖析-clickhouse的复制表引擎重复数据无法写入问题

作者头像
公众号-利志分享
发布2022-04-25 09:20:02
2K0
发布2022-04-25 09:20:02
举报
文章被收录于专栏:利志分享

关于复制表重复数据无法写入,最近发现不少人在网上有问到,我这里进行一下讲解和演示。

关于问题有人去clickhouse中文社区问过,链接如下:

http://www.clickhouse.com.cn/topic/60dd3e737e8c564b014b5bc4

首先我们建一个表:

代码语言:javascript
复制
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如下:

代码语言:javascript
复制
insert into default.bbb values(1.1,2.2,3,4,5,'2021-07-10 23:26:28')

上面的sql我执行10次,我们查数据发现数据还是只有一条,为什么呢?

经过一番查证,官方有个参数:insert_deduplicate,介绍是这么写的:

  • 启用或禁用INSERT的块重复数据删除(用于Replicated*表)。
  • 可能的值:
  • 0 -禁用。
  • 1 -启用。
  • 默认值:1。
  • 默认情况下,通过INSERT语句插入到复制表中的块会被重复数据删除(请参阅数据复制)。

我把这个参数设置

代码语言:javascript
复制
set insert_deduplicate = 0

之后重新执行上面的插入操作,数据就成功写进去了。

我在github上面查到了一个issue,链接如下:

https://github.com/ClickHouse/ClickHouse/issues/3526,

这里有说到这个问题,并且告诉三种设置整个insert_deduplicate参数的三种方式:

  1. In a user profile in users.xml
  2. For a session using the SET command: SET insert_deduplicate=0
  3. (for SELECT statements) in the SETTINGS clause of the statement.

至于为什么要这么设计,我看了另外一个issue,链接如下,大概意思是说真实业务场景不会出现重复写入。链接如下:

https://github.com/ClickHouse/ClickHouse/issues/20867,

同学们有兴趣自己看看。

这个坑,估计对新手来说,很多人都会遇到,写个文章,希望对大家有帮助。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 利志分享 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档