irpas技术客

clickhouse删除表的问题_颍天_clickhouse 删除表

irpas 7095

文章目录 前言测试解决办法

前言

在日常使用clickhouse的时候,肯定会遇到删除表的操作,删除表的命令:DROP TABLE IF EXISTS test.test。有时候删除后表又想马上重建表,这时候你会发现相同表结构的表创建不了,以下就来测试一下。

测试

本地表 建表语句:

create table test.test(id Int64 comment 'id',user_id Int64 comment '用户ID')ENGINE = MergeTree() order by id SETTINGS index_granularity = 8192

删除表:DROP TABLE IF EXISTS test.test 马上重建表,成功。

复制表 复制表的引擎是ReplicatedMergeTree引擎族,在使用他们到时候需要两个参数:

1.ZK中该表相关数据的存储路径,ClickHouse官方建议规范化/clickhouse/tables/{shard}/[database_name]/[table_name] 2.副本名称,一般用{replica}即可。

建表语句:

create table test.test(id Int64 comment 'id',user_id Int64 comment '用户ID')ENGINE = ReplicatedMergeTree('/clickhouse/tables/test/{shard}','{replica}') order by id SETTINGS index_granularity = 8192

删除表:DROP TABLE IF EXISTS test.test 马上重建表,失败。失败提示如下:

分布式表 ClickHouse分布式表的本质并不是一张表,而是一些本地物理表(分片)的分布式视图,本身并不存储数据。

建表语句:

create table test.test_all as test.test ENGINE = Distributed(yk_ck_cluster, test, test, rand())

删除表:DROP TABLE IF EXISTS test.test_all 马上重建表,成功。

解决办法

在我们删除本地表和分布式表后,立即重建是没有问题的。唯一有问题的就是复制表,因为复制表需要在zookeeper上建立一个路径,存放相关数据。clickhouse默认的库引擎是原子数据库引擎,删除Atomic数据库中的表后,它不会立即删除,而是会在480秒后删除。由下面这个参数控制:

config.xml <database_atomic_delay_before_drop_table_sec>480</database_atomic_delay_before_drop_table_sec>

我们可以使用一下办法来解决这个问题:

使用普通数据库而不是原子数据库。 create database … Engine=Ordinary.使用uniq ZK路径。{uuid}/clickhouse/tables/{layer}-{shard}-{uuid}/减少database_atomic_delay_before_drop_table_sec = 0 & drop table … sync


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #ClickHouse #删除表 #TABLE #IF #EXISTS #testtest