前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >clickhouse日常操作问题分享1031

clickhouse日常操作问题分享1031

作者头像
July
发布2022-11-14 16:14:32
1K0
发布2022-11-14 16:14:32
举报
文章被收录于专栏:数据库干货铺

1. 分布式表创建

1.1 创建本地表

需在每个节点创建表

代码语言:javascript
复制
CREATE TABLE testdb.t_tb1
(
    `uuid` String,
    `name` String,
    `timestamp` DateTime64(3),
    `insert_time` DateTime64(3),
    `note` String
)
ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/testdb/t_tb1', '{replica}')
PARTITION BY toYYYYMMDD(timestamp)
ORDER BY timestamp
SETTINGS index_granularity = 8192

1.2 创建分布式表

代码语言:javascript
复制
 CREATE TABLE testdb.t_tb1_all
(
      `uuid` String,
    `name` String,
    `timestamp` DateTime64(3),
    `insert_time` DateTime64(3),
    `note` String
)
ENGINE = Distributed('ck', 'testdb', 't_tb1', rand());

1.3 常见问题

Map类型问题

如使用到map类型,则创建本地表时会出现如下错误

代码语言:javascript
复制
Code: 44. DB::Exception: Received from localhost:9000. DB::Exception: Cannot create table with column 'xxx' which type is 'Map(String,Int64)' because experimental Map type is not allowed. Set 'allow_experimental_map_type = 1' setting to enable.

此时按照提示,创建表前进行allow_experimental_map_type =1设置即可

代码语言:javascript
复制
set  allow_experimental_map_type  =1;

分区数上限问题

代码语言:javascript
复制
2022-10-29T23:24:37.968170Z  WARN vector::sinks::util::retries: Retrying after response. reason=Code: 252, e.displayText() = DB::Exception: Too many parts (120163) in all partitions in total. This indicates wrong choice of partition key. The threshold can be modified with 'max_parts_in_total' setting in <merge_tree> element in config.xml or with per-table setting. (version 21.3.12.2 (official build))

默认每张表的分区数大小是10W,超过后将只能等待分区数合并后才能继续写入。解决方式有两种:

  • 修改表分区数上限:如建表或修改表语句中加max_parts_in_total = 110000
  • 修改分区方式:修改分区键 推荐使用第二种,因为分区数上限调大后对整体的稳定性有影响 其他表级别的报错信息,都可以修改表属性方式实现。但是修改前建议先考虑使用方面是否可以优化。

2. 重建分布式表

在clickhouse的使用过程中,难免会要删除掉已经创建好的表或进行重建。正常步骤为先删除本地表,再删除分布式表,删除命令如下

代码语言:javascript
复制
--删除本地表
drop table testdb.t_tb1on cluster ck;
--删除分布式
drop table testdb.t_tb1_all on cluster ck;

删除表后立马进行重建时,可能会出现如下报错

代码语言:javascript
复制
Code: 253. DB::Exception: Received from localhost:9000. DB::Exception: Replica /clickhouse/tables/03/testdb/t_tb1/replicas/192.168.56.129 already exists.

原因是clickhouse默认的库引擎是原子数据库引擎,删除Atomic数据库中的表后,它不会立即删除,而是会在480秒后删除。

处理方式,有3种:

  • 修改database_atomic_delay_before_drop_table_sec参数,设置为需要的大小(默认480s)
  • 等待480后在进行重建表的操作
  • 修改建表语句中名称,如t_tb1 改为t_tb1_new等 推荐不修改,等待一段时间后再重建。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-10-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据库干货铺 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档