ClickHouse(二十):Clickhouse SQL DDL操作-2-分区表DDL操作

news2025/1/18 11:48:26

 进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注IT贫道,获取高质量博客内容!

🏡个人主页:含各种IT体系技术,IT贫道_Apache Doris,大数据OLAP体系技术栈,Kerberos安全认证-CSDN博客

📌订阅:拥抱独家专题,你的订阅将点燃我的创作热情!

👍点赞:赞同优秀创作,你的点赞是对我创作最大的认可!

⭐️ 收藏:收藏原创博文,让我们一起打造IT界的荣耀与辉煌!

✏️评论:留下心声墨迹,你的评论将是我努力改进的方向!


目录

1. 查看分区信息

2. 卸载分区

3. 装载分区

4. 删除分区

​​​​​​​5. 替换分区

6. 移动分区

​​​​​​​​​​​​​​7. 重置分区列


ClickHouse中只有MergeTree家族引擎下的表才能分区。这里说的分区表就是MergeTree家族表引擎对应的分区表。

1. 查看分区信息

  • 示例:
#在newdb中创建分区表 t_partition ,使用MergeTree引擎

node1 :) create table t_partition (id UInt8,name String,age UInt8,loc String) engine = MergeTree() order by id partition by loc;



#向表 t_partition 中插入以下数据:

node1 :) insert into t_partition values (1,'张三',18,'BJ'),(2,'李四',19,'GZ'),(3,'王五',20,'BJ'),(4,'马六',21,'GZ');



#查询表 t_partition 的分区信息

node1 :) select database,table,name,partition from system.parts where table = 't_partition';

也可以在ClickHouse节点上查看分区信息,路径为:/var/lib/clickhouse/data/newdb/t_partition/,信息如下:

2. 卸载分区

将指定分区的数据移动到 detached 目录。服务器会忽略被分离的数据分区。只有当你使用 ATTACH 时,服务器才会知晓这部分数据。当执行操作以后,可以对 detached 目录的数据进行任意操作,例如删除文件,或者放着不管。

  • 卸载分区语法:
ALTER TABLE table_name DETACH PARTITION partition_expr
  • 示例:
#卸载 表 t_partition 中 ‘BJ’分区数据

node1 :) alter table t_partition detach partition 'BJ'



#查看表 t_partition中的数据

node1 :) select * from t_partition;

┌─id─┬─name─┬─age─┬─loc─┐

│  2  │ 李四  │  19  │ GZ  │

│  4  │ 马六  │  21  │ GZ  │

└────┴──────┴─────┴─────┘



#查看表 t_partition 中的分区信息

node1 :) select database,table,name,partition from system.parts where table = 't_partition';

┌─database─┬─table───────┬─name───────────────────────────────────┬─partition─┐

│ newdb     │ t_partition │ 8700fff36a8bf87b6ea3eedb16d04038_2_2_0 │ GZ         │

└──────────┴─────────────┴────────────────────────────────────────┴───────────┘



#查看路径/var/lib/clickhouse/data/newdb/t_partition/detached中数据,发现卸载的对应分区移动到此目录中

3. 装载分区

我们可以将已经卸载的分区重新装载到对应的表分区中。这里就是将detached目录中的数据重新移动到对应的表数据目录下。

也可以将卸载的分区数据加载到其他表中,但是这个表需要与原来的表具有相同的表结构及相同的分区字段。

  • 装载分区数据语法:
ALTER TABLE table_name ATTACH PARTITION partition_expr
  • 示例:
#将表 t_partition 对应的 ‘BJ’分区装载回来

node1 :) alter table t_partition attach partition 'BJ';



#查看表 t_partition 中的数据

node1 :) select * from t_partition;

┌─id─┬─name─┬─age─┬─loc─┐

│  1  │ 张三  │  18 │ BJ   │

│  3  │ 王五  │  20 │ BJ   │

└────┴──────┴─────┴─────┘

┌─id─┬─name─┬─age─┬─loc─┐

│  2  │ 李四  │  19 │ GZ   │

│  4  │ 马六  │  21 │ GZ   │

└────┴──────┴─────┴─────┘



#查看表 t_partition 分区信息

node1 :) select database,table,name,partition from system.parts where table = 't_partition';

​​​​​​​4. 删除分区

ClickHouse中的分区表,可以针对分区表删除某个分区,之后再导入当前分区的数据,以达到数据更新的目的。​​​​​​​

执行删除分区命名是直接将对应分区数据删除,不会放入detached目录。该操作会将分区标记为不活跃的,然后在大约10分钟内删除全部数据。

  • 删除分区语法:
ALTER TABLE table_name DROP PARTITION partition_expr
  • 示例:
#删除表 t_partition 中的 'BJ' 分区:

node1 :) alter table t_partition drop partition 'BJ';



#查询 t_partition 中的分区信息:

node1 :) select database,table,name,partition from system.parts where table = 't_partition';

┌─database─┬─table───────┬─name───────────────────────────────────┬─partition─┐

│ newdb     │ t_partition  │ 8700fff36a8bf87b6ea3eedb16d04038_2_2_0 │ GZ         │

└──────────┴─────────────┴────────────────────────────────────────┴───────────┘

​​​​​​​5. 替换分区

替换分区支持将table1表的分区数据复制到table2表,并替换table2表的已有分区。table1表中分区数据不会被删除,table1和table2表必须要有相同的表结构且分区字段相同。这个操作经常用作数据备份、表数据同步操作。

  • 替换分区语法:
ALTER TABLE table2 REPLACE PARTITION partition_expr FROM table1
  • 示例:
#创建表 table1 和table2 ,使用MergeTree表引擎,并且两表结构相同

node1 :) create table table1 (id UInt8,name String,age UInt8,loc String) engine = MergeTree() order by id partition by loc;



node1 :) create table table2 (id UInt8,name String,age UInt8,loc String) engine = MergeTree() order by id partition by loc;



#向table1中插入以下数据

node1 :) insert into table1 values (1,'张三',18,'BJ'),(2,'李四',19,'GZ'),(3,'王五',20,'BJ'),(4,'马六',21,'GZ');

┌─id─┬─name─┬─age─┬─loc─┐

│  1   │ 张三    │  18   │ BJ    │

│  3   │ 王五    │  20   │ BJ    │

└───┴────┴────┴────┘

┌─id─┬─name─┬─age─┬─loc─┐

│  2   │ 李四    │  19   │ GZ    │

│  4   │ 马六    │  21   │ GZ    │

└───┴────┴────┴────┘



#向table2中插入以下数据

node1 :) insert into table2 values (5,'田七',22,'BJ'),(6,'赵八',23,'GZ'),(7,'李九',24,'BJ'),(8,'郑十',25,'GZ');

┌─id─┬─name─┬─age─┬─loc─┐

│  5   │ 田七    │  22   │ BJ    │

│  7   │ 李九    │  24   │ BJ    │

└───┴────┴────┴────┘

┌─id─┬─name─┬─age─┬─loc─┐

│  6   │ 赵八   │  23   │  GZ    │

│  8   │ 郑十   │  25   │ GZ     │

└───┴────┴────┴────┘



#将table1表中’BJ’分区内的数据替换到table2中

node1 :) alter table table2 replace partition 'BJ' from table1;



#查看表 table2中的数据

node1 :) select * from table2;

┌─id─┬─name─┬─age─┬─loc─┐

│  1  │ 张三  │  18  │ BJ  │

│  3  │ 王五  │  20  │ BJ  │

└────┴──────┴─────┴─────┘

┌─id─┬─name─┬─age─┬─loc─┐

│  6  │ 赵八  │  23 │ GZ   │

│  8  │ 郑十  │  25 │ GZ   │

└────┴──────┴─────┴─────┘



#查看表 table1中的数据,没有变化,不会删除 ‘BJ’ 分区的数据

node1 :) select * from table1;

┌─id─┬─name─┬─age─┬─loc─┐

│  1  │ 张三  │  18  │ BJ  │

│  3  │ 王五  │  20  │ BJ  │

└────┴──────┴─────┴─────┘

┌─id─┬─name─┬─age─┬─loc─┐

│  2  │ 李四  │  19  │ GZ  │

│  4  │ 马六  │  21  │ GZ  │

└────┴──────┴─────┴─────┘

6. 移动分区

该操作将 table_source表的数据分区移动到 table_dest表,并删除table_source表的数据。

  • 移动分区语法:
ALTER TABLE table_source MOVE PARTITION partition_expr TO TABLE table_dest
  • 示例:
#创建表 table_source ,table_dest, 两表结构相同,都是MergeTree引擎表

node1 :) create table table_source (id UInt8,name String,age UInt8,loc String) engine = MergeTree() order by id partition by loc;



node1 :) create table table_dest (id UInt8,name String,age UInt8,loc String) engine = MergeTree() order by id partition by loc;



#向table_source 表中插入以下数据

node1 :) insert into table_source values (1,'张三',18,'BJ'),(2,'李四',19,'GZ'),(3,'王五',20,'BJ'),(4,'马六',21,'GZ');

┌─id─┬─name─┬─age─┬─loc─┐

│  1   │ 张三    │  18   │ BJ    │

│  3   │ 王五    │  20   │ BJ    │

└───┴────┴────┴────┘

┌─id─┬─name─┬─age─┬─loc─┐

│  2   │ 李四    │  19   │ GZ    │

│  4   │ 马六    │  21   │ GZ    │

└───┴────┴────┴────┘



#向table_dest 表中插入以下数据:

node1 :) insert into table_dest values (5,'田七',22,'BJ'),(6,'赵八',23,'GZ'),(7,'李九',24,'BJ'),(8,'郑十',25,'GZ');

┌─id─┬─name─┬─age─┬─loc─┐

│  5   │ 田七    │  22   │ BJ    │

│  7   │ 李九    │  24   │ BJ    │

└───┴────┴────┴────┘

┌─id─┬─name─┬─age─┬─loc─┐

│  6   │ 赵八   │  23   │  GZ    │

│  8   │ 郑十   │  25   │ GZ     │

└───┴────┴────┴────┘



#将表 table_source 中的分区‘BJ’的数据移动到 table_dest表中

node1 :) alter table table_source move partition 'BJ' to table table_dest;



#查看表 table_source中的数据

node1 :) select * from table_source;

┌─id─┬─name─┬─age─┬─loc─┐

│  1  │ 张三  │  18 │ BJ  │

│  3 │ 王五   │  20 │ BJ  │

└────┴──────┴─────┴─────┘

┌─id─┬─name─┬─age─┬─loc─┐

│  2  │ 李四  │  19 │ GZ  │

│  4  │ 马六  │   21 │ GZ │

└────┴──────┴─────┴─────┘



#查看表 table_dest中的数据

node1 :) select * from table_dest;

┌─id─┬─name─┬─age─┬─loc─┐

│  6  │ 赵八  │  23 │ GZ  │

│  8  │ 郑十  │  25 │ GZ  │

└────┴──────┴─────┴─────┘

┌─id─┬─name─┬─age─┬─loc─┐

│  5  │ 田七  │  22 │ BJ  │

│  7  │  李九 │  24 │ BJ  │

└────┴──────┴─────┴─────┘

┌─id─┬─name─┬─age─┬─loc─┐

│  1  │ 张三  │  18 │ BJ  │

│  3  │ 王五  │  20 │ BJ  │

└────┴──────┴─────┴─────┘



#手动执行 optimize 命令,合并table_dest相同分区数据

node1 :) optimize table table_dest;



#查询表 table_dest中的数据

node1 :) select * from table_dest;

┌─id─┬─name─┬─age─┬─loc─┐

│  1  │ 张三  │  18 │ BJ  │

│  3  │ 王五  │  20 │ BJ  │

│  5  │ 田七  │  22 │ BJ  │

│  7  │ 李九  │  24 │ BJ  │

└────┴──────┴─────┴─────┘

┌─id─┬─name─┬─age─┬─loc─┐

│  6  │ 赵八  │  23 │ GZ  │

│  8  │ 郑十  │  25 │ GZ  │

└────┴──────┴─────┴─────┘



#查看 table_source 表中的数据,分区‘BJ’被删除。

node1 :) select * from table_source;

┌─id─┬─name─┬─age─┬─loc─┐

│  2  │ 李四  │  19 │ GZ  │

│  4  │ 马六  │  21 │ GZ  │

└────┴──────┴─────┴─────┘

​​​​​​​​​​​​​​7. 重置分区列

重置指定分区的特定列的值,就是将指定分区下某列的数据清空,如果建表时使用了 DEFAULT 语句,该操作会将列的值重置为该默认值。

  • 重置分区列语法:
ALTER TABLE table_name CLEAR COLUMN column_name IN PARTITION partition_expr
  • 示例:
#针对之前的表 table_dest中的数据进行操作,清空当前表中 ‘BJ’分区中name列

node1 :) alter table table_dest clear column name in partition 'BJ';



#查看表 table_dest中的数据

node1 :) select * from table_dest;

┌─id─┬─name─┬─age─┬─loc─┐

│  1  │       │  18 │ BJ  │

│  3  │       │  20 │ BJ  │

│  5  │       │  22 │ BJ  │

│  7  │       │  24 │ BJ  │

└────┴──────┴─────┴─────┘

┌─id─┬─name─┬─age─┬─loc─┐

│  6  │ 赵八  │  23 │ GZ  │

│  8  │ 郑十  │  25 │ GZ  │

└────┴──────┴─────┴─────┘

👨‍💻如需博文中的资料请私信博主。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/884720.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TienChin 引入 MyBatisPlus

在父工程当中添加版本号&#xff0c;统一管理&#xff1a; <mybatis-plus.version>3.5.1</mybatis-plus.version> 在父工程当中添加 MyBatisPlus 依赖&#xff1a; <!--MyBatis Plus--> <dependency><groupId>com.baomidou</groupId><a…

单链表相关操作(头插法和尾插法)

目录 1.尾插法建立单链表 带头结点 不带头节点 用户输入建立单链表 带头结点 不带头结点 2.头插法建立单链表 带头结点 用户输入建立单链表 带头结点 不带头结点 头插法和尾插法最大区别在于&#xff0c;尾插法可以顺序输出用户输入的元素&#xff0c;头插法则是逆序…

读高性能MySQL(第4版)笔记02_MySQL架构(下)

1. 事务日志 1.1. 事务日志有助于提高事务的效率 1.1.1. 存储引擎只需要更改内存中的数据副本&#xff0c;而不用每次修改磁盘中的表&#xff0c;这会非常快 1.1.2. 更改的记录写入事务日志中&#xff0c;事务日志会被持久化保存在硬盘上 1.2. 事务日志采用的是追加写操作&…

AMD Zen4最后一招!64核心只需200W

AMD Zen4已经布局得差不多了&#xff0c;不过在服务器上还有最后一招&#xff0c;那就是面向边缘计算、电信基础设施等不需要太强性能、但对功耗和能效很敏感的Siena系列。 Zen4霄龙已经发布了三个系列&#xff0c;标准的Genoa(96核心)、集成3D缓存的Genoa-X(96核心/1152MB三级…

关于牛津大学暑研项目的总结和收获

关于牛津大学暑研项目的总结和收获 关于这篇博客主要是想记录一下这次项目的一些收获和心得&#xff0c;一如三年前参与新加坡国立大学的寒研项目一样。我这次的参加的日期是在八月份的数学&#xff0c;物理和计算机类的&#xff0c;这次分享的内容主要集中在学术、生活和思维…

生信豆芽菜-TMEscore预测免疫浸润程度

网址&#xff1a;http://www.sxdyc.com/immuneTmeScore 一、TMEscore预测免疫浸润程度介绍 使用TMEscore包预测患者免疫浸润程度;参考文章Cancer Immunology Research, 2019, 7(5), 737-750;DOI: 10.1158/2326-6066.CIR-18-0436;PMID: 30842092 二、使用方法 1、数据准备 一个全…

单片机串口通讯实战:详解STM32的串口编程与数据传输

引言&#xff1a; 单片机串口通讯是应用非常广泛的通讯方式&#xff0c;具有简单、灵活、稳定等特点。本文将深入探讨单片机串口通讯的原理、应用和性能优化&#xff0c;同时介绍如何使用STM32单片机进行串口编程&#xff0c;并提供详细的代码示例和注释。 一、单片机串口通讯…

都错了!机械硬盘远比SSD更省电 最多领先94%

相信在绝大多数人的认知中&#xff0c;SSD固态硬盘因为没有HDD机械硬盘那样的移动部件&#xff0c;不但更稳定&#xff0c;还更省电。 但是&#xff0c;存储服务商Scality的研究表明&#xff0c;恰恰相反&#xff0c;HDD更省电。 他们以美光6500 ION 30.72TB QLC SSD、希捷银河…

如何安装Python?

如何安装Python&#xff1f; 安装Python非常简单&#xff0c;让我们一步步来进行。 1. 访问官方网站 首先&#xff0c;您需要访问Python官方网站&#xff08;https://www.python.org/&#xff09;。在首页上&#xff0c;您会看到一个大大的「Downloads」按钮&#xff0c;点击…

深信服数据中心管理系统 XXE漏洞复现

0x01 产品简介 深信服数据中心管理系统DC为AC的外置数据中心&#xff0c;主要用于海量日志数据的异地扩展备份管理&#xff0c;多条件组合的高效查询&#xff0c;统计和趋势报表生成&#xff0c;设备运行状态监控等功能。 0x02 漏洞概述 深信服数据中心管理系统DC存在XML外部实…

Python的变量命名规则是什么?

Python的变量命名规则 在Python中&#xff0c;变量是用来存储数据的&#xff0c;而变量命名是为了方便我们理解和引用这些数据。Python的变量命名规则相对灵活&#xff0c;但也有一些基本规则和约定&#xff0c;让我们一起来了解一下。 基本规则 只能包含字母、数字和下划线&…

使用 flatMap 进行扁平化映像处理数据

实战背景 &#xff1a; 小伙伴遇到了数据处理方面的问题如下 &#xff1a; 只能说看到这里我也一头雾水&#xff0c;毕竟我也是菜&#x1f436;&#xff0c;那就请教大佬吧 &#xff1a; Map.flat 循环 二维 变 一维 就是 flatMap 了 啊这&#xff0c;&#xff0c;但是 flatM…

[python] 安装numpy+scipy+matlotlib+scikit-learn及问题解决

这篇文章主要讲述Python如何安装Numpy、Scipy、Matlotlib、Scikit-learn等库的过程及遇到的问题解决方法。最近安装这个真是一把泪啊&#xff0c;各种不兼容问题和报错&#xff0c;希望文章对你有所帮助吧&#xff01;你可能遇到的问题包括&#xff1a; ImportError: N…

Spring Boot+ redis执行lua脚本的5种方式

Spring Boot redis执行lua脚本示例 文章目录 Spring Boot redis执行lua脚本示例0.前言1.基础介绍2.步骤2.1. 引入依赖1. 使用Jedis作为Redis客户端&#xff1a;2. 使用Lettuce作为Redis客户端&#xff1a; 2.2. 配置文件使用Jedis作为Redis客户端的配置文件&#xff08;applica…

突破防线!泛微OA任意文件上传Getshell

子曰&#xff1a;“巧言令色&#xff0c;鲜矣仁。” 漏洞复现 访问漏洞url&#xff1a; 存在漏洞的路径为 /weaver/weaver.common.Ctrl/.css?arg0com.cloudstore.api.service.Service_CheckApp&arg1validateApp漏洞利用&#xff1a; 漏洞证明&#xff1a; 文笔生疏&…

2021年12月 C/C++(二级)真题解析#中国电子学会#全国青少年软件编程等级考试

第1题&#xff1a;统计指定范围里的数 给定一个数的序列S&#xff0c;以及一个区间[L, R], 求序列中介于该区间的数的个数&#xff0c;即序列中大于等于L且小于等于R的数的个数。 时间限制&#xff1a;1000 内存限制&#xff1a;65536 输入 第一行1个整数n、&#xff0c;分别表…

Intel 12代酷睿集体大降价!三折太离谱了

之前有德国媒体报道称&#xff0c;Intel 12/13代酷睿以及即将发布的14代酷睿&#xff0c;将会全面涨价。 没想到&#xff0c;12代酷睿大降价了&#xff0c;幅度相当不可思议&#xff0c;不过至少目前仅限美国市场&#xff0c;新蛋、亚马逊、MicroCenter等大型零售商集体行动。 …

C#__匿名方法和Lambda表达式

class Program{static void Main(string[] args){// 匿名方法&#xff1a;方法没有名字Func<int, int, int> plus delegate (int a, int b){return a b;};// 这里相当于直接把要引用的方法直接写在后面// 优点&#xff1a;减少了要编写的代码&#xff0c;减少代码的复杂…

BGP的路由反射器和联邦

1、规划IP及拓扑图 172.16.0.0/16 借到24位 可用范围网段&#xff1a;0-31 172.16.0.0/24 要分6个网段IP借3位 172.16.0.0/27 172.16.0.32/27 172.16.0.64/27 172.16.0.96/27 172.16.0.128/27 172.16.0.160/27 作为骨干网段 172.16.1.0/24 6个建邻环回…

生信豆芽菜-相关性散点图

网址&#xff1a;http://www.sxdyc.com/panCancerScatterDiagram 1、数据准备 第一个文件&#xff1a;相关性分析结果 2、选择想要显示的肿瘤的名称&#xff0c;如果是多个&#xff0c;就用逗号隔开&#xff08;这里的逗号为英文字符下的逗号&#xff09; 3、结果 当然&…