Clickhouse数据表、数据分区partition的基本操作代码

 更新时间:2023年11月20日 10:22:56   作者:Bulut0907  
clickhouse的分区是指将数据按照分区键进行划分,每个分区可以包含多个数据块,这篇文章主要介绍了Clickhouse数据表、数据分区partition的基本操作代码,需要的朋友可以参考下

1. 数据表的基本操作

只有MergeTree系列、Merge、Distributed表引擎支持alter操作

1.1 添加字段

clickhouse1 :)
clickhouse1 :) create table alter_table_test(
:-] id UInt32,
:-] name String,
:-] city String
:-] ) engine = MergeTree()
:-] order by id;
clickhouse1 :) 
clickhouse1 :) alter table alter_table_test add column if not exists score Float32 default 8.8 after city;
clickhouse1 :) 

1.2 修改字段数据类型、添加或修改字段默认值

clickhouse1 :) 
clickhouse1 :) alter table alter_table_test modify column if exists score Float64 default 0.0;
clickhouse1 :) 

修改前后的字段数据类型需要兼容

1.3 添加或修改字段备注

clickhouse1 :) 
clickhouse1 :) alter table alter_table_test comment column if exists score '分数';
clickhouse1 :)

1.4 删除字段

clickhouse1 :) 
clickhouse1 :) alter table alter_table_test drop column if exists score;
clickhouse1 :) 

1.5 重命名或移动数据表

clickhouse1 :) 
clickhouse1 :) rename table default.alter_table_test to default.alter_table_rename_test;
clickhouse1 :) 
  • 多个db.tb to db.tb用逗号分隔
  • 如果源表与目标表数据库不一样,则表示移动数据表, 但数据表的移动只能在同一服务器
  • 支持on cluster cluster_name操作

1.6 清空数据表

clickhouse1 :) 
clickhouse1 :) truncate table if exists default.alter_table_rename_test;
clickhouse1 :) 

支持on cluster cluster_name操作

1.7 insert数据

2. 数据分区partition的基本操作

测试表和测试数据的准备

clickhouse1 :) 
clickhouse1 :) create table partition_table_test(
:-] id UInt32,
:-] name String,
:-] city String
:-] ) engine = MergeTree()
:-] order by id
:-] partition by city;
clickhouse1 :) 
clickhouse1 :) insert into partition_table_test(id, name, city) values(1, 'name1', 'Beijing');
clickhouse1 :) insert into partition_table_test(id, name, city) values(2, 'name2', 'Shanghai');
clickhouse1 :) 
clickhouse1 :) create table partition_table_test2(
:-] id UInt32,
:-] name String,
:-] city String
:-] ) engine = ReplacingMergeTree()
:-] order by id
:-] partition by city;
clickhouse1 :) 

2.1 查询数据表partition相关信息

clickhouse1 :) 
clickhouse1 :) select database, table, partition, partition_id, name, path from system.parts where database = 'default' and table = 'partition_table_test';
┌─database─┬─table────────────────┬─partition─┬─partition_id─────────────────────┬─name───────────────────────────────────┬─path────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ default  │ partition_table_test │ Shanghai  │ 6a9748c898bf80cb661db240706867aa │ 6a9748c898bf80cb661db240706867aa_2_2_0 │ /root/clickhouse/store/9eb/9ebd4336-b065-48ac-9ebd-4336b06588ac/6a9748c898bf80cb661db240706867aa_2_2_0/ │
│ default  │ partition_table_test │ Beijing   │ 8d2db6c332407299b732139fd8a261c0 │ 8d2db6c332407299b732139fd8a261c0_1_1_0 │ /root/clickhouse/store/9eb/9ebd4336-b065-48ac-9ebd-4336b06588ac/8d2db6c332407299b732139fd8a261c0_1_1_0/ │
└──────────┴──────────────────────┴───────────┴──────────────────────────────────┴────────────────────────────────────────┴─────────────────────────────────────────────────────────────────────────────────────────────────────────┘
clickhouse1 :) 

一个partition_id下面存在多个name

2.2 删除partition

clickhouse1 :) 
clickhouse1 :) alter table partition_table_test drop partition 'Beijing'
:-] ;
clickhouse1 :) 
clickhouse1 :) select * from partition_table_test;
┌─id─┬─name──┬─city─────┐
│  2 │ name2 │ Shanghai │
└────┴───────┴──────────┘
clickhouse1 :)

上面我们删除了城市为Beijing的partition,然后再通过insert插入新的数据,就间接实现了数据更新

2.3 复制partition

clickhouse1 :) 
clickhouse1 :) alter table partition_table_test2 replace partition 'Shanghai' from partition_table_test;
clickhouse1 :) 
clickhouse1 :) select * from partition_table_test2;
┌─id─┬─name──┬─city─────┐
│  2 │ name2 │ Shanghai │
└────┴───────┴──────────┘
clickhouse1 :) 
  • 将A表的数据partition,复制到B表的条件:

    两张表字段结构完全相同

    两张表partition by、order by一样

  • 会删除目标表partition_table_test2原来的城市Shanghai partition

2.4 将partition中某一列的数据变为默认值

clickhouse1 :)
clickhouse1 :) alter table partition_table_test clear column name in partition 'Shanghai';
clickhouse1 :)
clickhouse1 :) select * from partition_table_test;
┌─id─┬─name─┬─city─────┐
│  2 │      │ Shanghai │
└────┴──────┴──────────┘
clickhouse1 :) 
  • 变更字段不能为primary key、order by、partition by定义的字段
  • 如果该字段未声明默认值,则以字段数据类型的默认值为准

2.5 partition的卸载和装载

clickhouse1 :)
clickhouse1 :) alter table partition_table_test detach partition 'Shanghai';
clickhouse1 :) 
clickhouse1 :) select * from partition_table_test;
SELECT *
FROM partition_table_test
Query id: 45460933-7b2e-4389-a056-85d3d75184a8
Ok.
0 rows in set. Elapsed: 0.005 sec. 
clickhouse1 :) 
clickhouse1 :) alter table partition_table_test attach partition 'Shanghai';
clickhouse1 :) 
clickhouse1 :) select * from partition_table_test;
┌─id─┬─name─┬─city─────┐
│  2 │      │ Shanghai │
└────┴──────┴──────────┘
clickhouse1 :) 
  • detach后,该分区目录被移动到数据表目录的detached目录下
  • clickhouse除了能对detached目录下的分区目录执行attach命令, 不能执行其它操作
  • attach则将detached目录下的分区目录重新移回去

到此这篇关于Clickhouse数据表、数据分区partition的基本操作的文章就介绍到这了,更多相关Clickhouse 数据分区partition内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SQL利用Function创建长整形的唯一ID示例代码

    SQL利用Function创建长整形的唯一ID示例代码

    这篇文章主要给大家介绍了关于SQL利用Function创建长整形的唯一ID的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • sql注入之必备的基础知识

    sql注入之必备的基础知识

    这篇文章所有的知识点都是在sql注入中最常用到也是最基础的知识点。对于一个需要精通sql语句的web安全工程师来说,下面的知识是必须要掌握的。下面的知识也是学习sql注入最基本的知识。下面大家来一起看看吧。
    2016-09-09
  • 深入理解数据库之表的唯一、自增等七大约束

    深入理解数据库之表的唯一、自增等七大约束

    真正约束字段的是数据类型,但是数据类型约束很单一,需要有一些额外的约束,更好的保证数据的合法性,从业务逻辑角度保证数据的正确性,本文就来介绍一下数据库之表的唯一、自增等七大约束,感兴趣的可以了解一下
    2023-09-09
  • dapper使用Insert或update时部分字段不映射到数据库

    dapper使用Insert或update时部分字段不映射到数据库

    我们在使用dapper的insert或update方法时可能会遇见一些实体中存在的字段但是,数据库中不存在的字段,这样在使用insert时就是抛出异常提示字段不存在,这个时候该怎么解决呢,下面给大家分享示例实体代码,感兴趣的朋友一起看看吧
    2023-12-12
  • 数据库sql查询性能优化详解

    数据库sql查询性能优化详解

    这篇文章主要介绍了数据库sql查询性能优化详解,查询优化的本质是让数据库优化器为SQL语句选择最佳的执行计划,对于大型的应用系统,大量的数据当然需要效率最快的执行语句,需要的朋友可以参考下
    2023-07-07
  • 快速解决openGauss数据库pg_xlog爆满问题

    快速解决openGauss数据库pg_xlog爆满问题

    这篇文章主要介绍了openGauss数据库pg_xlog爆满问题解决,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • sql Union和Union All的使用方法

    sql Union和Union All的使用方法

    UNION指令的目的是将两个SQL语句的结果合并起来。从这个角度来看, 我们会产生这样的感觉,UNION跟JOIN似乎有些许类似,因为这两个指令都可以由多个表格中撷取资料。
    2009-07-07
  • SQL数据库的所有命令(函数、运算符)汇总大全

    SQL数据库的所有命令(函数、运算符)汇总大全

    结构化查询语言(Structured Query Language)简称SQL,结构化查询语言是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。sql语句就是对数据库进行操作的一种语言。
    2023-01-01
  • 时序数据库VictoriaMetrics源码解析之写入与索引

    时序数据库VictoriaMetrics源码解析之写入与索引

    这篇文章主要为大家介绍了VictoriaMetrics时序数据库的写入与索引源码解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • DBeaver连接GBase数据库的简单步骤记录

    DBeaver连接GBase数据库的简单步骤记录

    DBeaver数据库连接工具,是我用了这么久最好用的一个数据库连接工具,拥有的优点,支持的数据库多、快捷键很赞、导入导出数据非常方便,下面这篇文章主要给大家介绍了关于DBeaver连接GBase数据库的简单步骤,需要的朋友可以参考下
    2024-03-03

最新评论