我们在使用clickhouse时,有时候会在建表时指定分片字段,分片字段如果指定的比较合适会将同类的数据放在同一个文件内,提高批量查询的效率,但是如果分片字段执行的不合适,会导致插入式报错。

批量插入报错

如果分片字段指定的不合适,可能在往clickhouse批量插入数据时,会出现如下报错信息

[BatchInsertXXXModel] sync data xxx err:
SyncInfoData.BatchInsertData err, tableName: t_xxx: code: 252,
message: Too many partitions for single INSERT block (more than
100). The limit is controlled by
'max_partitions_per_insert_block' setting. Large number of
partitions is a common misconception. It will lead to severe
negative performance impact, including slow server startup,
slow INSERT queries and slow SELECT queries. Recommended total
number of partitions for a table is under 1000..10000. Please
note, that partitioning is not intended to speed up SELECT
queries (ORDER BY key is sufficient to make range queries
fast). Partitions are intended for data manipulation (DROP
PARTITION, etc)

核心问题在于,建表时指定的分片字段不合适,插入数据离散型太高导致要插入的数据几乎都不在一个分片下。
分区不是为了加快SELECT查询的速度(ORDER BY键足以使范围查询更快)。分区用于数据操作(DROP PARTITION等)
解决方案:
1、去除建表语句中的分片字段,表不再分片
2、修改分片字段为一个合适的字段,保证数据离散型不要太大

值得注意的是,clickhouse是无法直接对表进行分区字段修改的,只能通过建立新表,数据移动,删除旧表的方式。

如何在clickhouse中更改分区

如:
CREATE TABLE traffic (`date` Date,...
) ENGINE = MergeTree(date, (end_time), 8192);
想在没有删除表的情况下更改PARTITION BY toYYYYMMDD(date)字段,如何执行此操作?由于ALTER 查询不允许分区更改,因此可能的方法是创建一个新表
CREATE TABLE traffic_new
(`date` Date,...
)
ENGINE = MergeTree(date, (end_time), 8192)
PARTITION BY toYYYYMMDD(date);
并移动您的数据INSERT INTO traffic_new SELECT * FROM traffic WHERE column BETWEEN x and xxxx;
如有必要,重命名最终表。是的,这个选项涉及删除旧表(似乎没有办法跳过这一步)

Clickhouse批量插入数据时报错:Too many partitions for single INSERT block相关推荐

  1. SQL Server 2008 批量插入数据时报错

    前几天在SQL Server 2008同步产品数据时,总是提示二进制文本被截断的错误,但是经过检查发现数据都符合格式要求. 百思不得其解,单独插入一条条数据则可以插入,但是批量导入则报错. 批量导入代 ...

  2. mysql设置主键自增长,插入数据时报错,解决

    mysql设置主键自增长,插入数据时报错,解决 创建一个可以自增长的表 create table user ( sid int not null primary key auto_inrement, ...

  3. clickhouse jdbc报错:Too many partitions for single INSERT block (more than 100)

    通过clickhouse官方jdbc写入时报错:Too many partitions for single INSERT block (more than 100) 解决: 调整了建表时PARTIT ...

  4. ClickHouse系列--Too many partitions for single INSERT block (more than 100)

    批量插入时,这一批数据是按照天分区的,一批数据里的日期跨度为一年,也就是单次插入可能产生365个分区,导致后台异步合并数据出现问题. 解决方案:单批次写入数据,要控制分区数量. exception, ...

  5. 【Clickhouse】Too many partitions for single INSERT block (more than 100)

    1.概述 我们10秒写入一次数据到ck A表(一次时间相同 500条以内条数),然后有个物化视图是B表, 但是偶然看见 报错 OOM kill Too many partitions for sing ...

  6. 数据库插入数据时报错 1364 - Field ‘house_name‘ doesn‘t have a default value

    1364 - Field 'house_name' doesn't have a default value出现的原因以及解决办法 一,表结构 二,问题 执行上面红框中的SQL语句时,报下面红框中的错 ...

  7. 使用Navicat插入数据时报错1062 - Duplicate entry ‘menu544073941‘ for key ‘PRIMARY‘

    -> 报错: 1062 - Duplicate entry 'menu544073941' for key 'PRIMARY' -> 原因:数据库表在设计时,没有设置id主键自增,而要插入 ...

  8. Python操作SQL server向其中插入数据时报错,且报错内容没有指向性。

    错误提示如下:Traceback (most recent call last):   File "src\pymssql\_pymssql.pyx", line 458, in ...

  9. 解决往数据库插入数据时报错的问题

    原始SQL: insert into yuJXZhB(ID,yuJXM,yuJXMMC,yuJXSh,biaoZhZh,zuiDZh,zuiXZh,fuDZh,yuJMSh,yuJDJ,gongAnB ...

最新文章

  1. 利用机器学习进行DNS隐蔽通道检测——数据收集,利用iodine进行DNS隐蔽通道样本收集...
  2. codeforces 498 div3(a-e java)
  3. 第二节:思维导图学习Shell脚本编程之命令之美
  4. sagan 自注意力_请使用英语:自我注意生成对抗网络(SAGAN)
  5. 全球10亿美元以上富翁人数排名,杭州超越东京,大家怎么看
  6. chdir、getcwd、mkdir、rmdir函数
  7. C++ 学习 之Struct
  8. Mac下Intellij IDea发布JavaWeb项目 详解一 (1、新建JavaEE Project并进行相应设置 2、配置tomcat)...
  9. vue+node多条件查询 分页_SpringBoot+JPA框架分页、带条件查询等操作
  10. SQL Server 连接到服务器-错误233的解决办法
  11. WinRAR使用基础技巧
  12. 嵌入式环境搭建之zmodem
  13. SOCKS 5协议详解
  14. C++练习 简易翻译器
  15. 关于检索关键字的常用四种方法
  16. loj6388 「THUPC2018」赛艇 / Citing
  17. springboot+mybatis打包时,单元测试类报错
  18. 现场直击大数据行业应用实践
  19. 【算法基础六】敲代码遇到VScode多行与单行注释的快捷操作
  20. 全球wcdma运营频段

热门文章

  1. Scala入门到精通——第一节 Scala语言初步
  2. 第一章 MBSE概览
  3. (域名怎么选)域名选择的技巧你知道哪些
  4. 开源我的分形风暴2程序+一些漂亮的分形图
  5. linux vi行首加符号,vi/vim 中如何在每行行首或行尾插入指定字符
  6. 年薪100万的六种热门职位
  7. jQuery form插件的使用--ajaxForm()和ajaxSubmit()的可选参数项对象
  8. [Excel 工具] 求和公式不生效使用+小图标
  9. java 多进程 并发_Java高效并发(九)
  10. C++ opencv模板匹配