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

 进入正文前,感谢宝子们订阅专题、点赞、评论、收藏!关注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.rhkb.cn/news/92135.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter性能测试系列-性能测试需求分析

性能测试需求分析 性能测试需求分析与传统的功能测试需求有所不同,功能测试需求分析重点在于从用户层面分析被测对象的功能性、易用性等质量特性,性能测试则需要从终端用户应用、系统架构设计、硬件配置等多个纬度分析系统可能存在性能瓶颈的业务。 性…

基于C#UI Automation自动化测试

步骤 UI Automation 只适用于,标准的win32和 WPF程序 需要添加对UIAutomationClient、 UIAutomationProvider、 UIAutomationTypes的引用 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.D…

Fiddler

基础 Fiddler 相当于一个 “代理”,浏览器访问浏览器页面时,就会把HTTP请求先发给Fiddler,Fiddler 再把请求转发给浏览器的服务器,当浏览器服务器返回数据时,Fiddler拿到返回数据,再把数据交给浏览器。 主界面 删除…

【Visual Studio Code】--- Win11 C盘爆满 修改 Code 插件数据和缓存的保存路径

Win11 C盘爆满 修改 Code 插件数据和缓存的保存路径 一、概述二、修改 Code 插件数据和缓存的保存路径 一、概述 一个好的文章能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径,学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成…

Postgresql源码(112)plpgsql执行sql时变量何时替换为值

相关 《Postgresql源码(41)plpgsql函数编译执行流程分析》 《Postgresql源码(46)plpgsql中的变量类型及对应关系》 《Postgresql源码(49)plpgsql函数编译执行流程分析总结》 《Postgresql源码(5…

word 应用 打不开 显示一直是正在启动中

word打开来显示一直正在启动中,其他调用word的应用也打不开,网上查了下以后进程关闭spoolsv.exe,就可以正常打开word了

OpenCV-Python中的图像处理-傅里叶变换

OpenCV-Python中的图像处理-傅里叶变换 傅里叶变换Numpy中的傅里叶变换Numpy中的傅里叶逆变换OpenCV中的傅里叶变换OpenCV中的傅里叶逆变换 DFT的性能优化不同滤波算子傅里叶变换对比 傅里叶变换 傅里叶变换经常被用来分析不同滤波器的频率特性。我们可以使用 2D 离散傅里叶变…

Mac RN环境搭建

RN ios android原生环境搭建有时候是真恶心,电脑环境不一样配置也有差异。 我已经安装官网的文档配置了ios环境 执行 npx react-nativelatest init AwesomeProject 报错 然后自己百度查呀执行 gem update --system 说是没有权限,执行失败。因为Mac…

Qt 7. 在自定义类TcpClient类中使用信号槽功能

1. 因为只有QObject类及其子类派生的类才能使用信号和槽机制。 使用信号和槽还必须在类声明的最开始处添加Q_OBJECT宏,在这个程序中,类的声明是自动生成的,已经添加了这个宏。UI类继承自QDialog,QDialog类又继承自QWidget类&…

数据链路层

数据链路层和网络层的对比 如果说网络层实现的是路由的功能,那么数据链路层就是实打实的实现具体的传输。 就像导航,网络层告诉我们下一步该去哪个主机,而数据链路层则是实现去下一个主机的方法。 网络层的IP地址告诉我们目的地在哪里&#x…

如何使用CSS实现一个纯CSS的滚动条样式?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用CSS实现自定义滚动条样式⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏是为那些对Web开发感兴趣…

每天一道leetcode:797. 所有可能的路径(图论中等深度优先遍历)

今日份题目: 给你一个有 n 个节点的 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 的路径并输出(不要求按特定顺序) graph[i] 是一个从节点 i 可以访问的所有节点的列表(即从节点 i 到节…

VBA manual

VBA MACRO Debug.Print()设置Macros安全修复乱码打开VBAAlt F11File/Options/Customize Ribbon Debug.Print() How to Use Excel VBA Debug. Print? 设置Macros安全 或者 File /Options 如果还是Block,右键文件属性 修复乱码 Tools / Options Control Pann…

大数据Flink(六十一):Flink流处理程序流程和项目准备

文章目录 Flink流处理程序流程和项目准备 一、Flink流处理程序的一般流程

java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfiguration

错误: java.lang.NoClassDefFoundError: org/apache/tez/dag/api/TezConfigurationat org.apache.hadoop.hive.ql.exec.tez.TezSessionPoolSession$AbstractTriggerValidator.startTriggerValidator(TezSessionPoolSession.java:74)at org.apache.hadoop.hive.ql.e…

day 0815

计算文件有多少行? 2.文件的拷贝

21.0 CSS 介绍

1. CSS层叠样式表 1.1 CSS简介 CSS(层叠样式表): 是一种用于描述网页上元素外观和布局的样式标记语言. 它可以与HTML结合使用, 通过为HTML元素添加样式来改变其外观. CSS使用选择器来选择需要应用样式的元素, 并使用属性-值对来定义这些样式.1.2 CSS版本 CSS有多个版本, 每个…

髋关节 弹响

评估测试 https://www.bilibili.com/video/BV1A44y1j71Y/?spm_id_from333.880.my_history.page.click&vd_source3535bfaa5db8443d107998d15e88dc44 根据此视频整理所得 托马斯测试 第一种情况 如果你难于将膝关节拉到胸前,并感觉前面有骨性的挤压 说明你股…

leetcode 面试题 02.05 链表求和

⭐️ 题目描述 🌟 leetcode链接:面试题 02.05 链表求和 ps: 首先定义一个头尾指针 head 、tail,这里的 tail 是方便我们尾插,每次不需要遍历找尾,由于这些数是反向存在的,所以我们直接加起来若…

分布式图数据库 NebulaGraph v3.6.0 正式发布,强化全文索引能力

本次 v3.6.0 版本,主要强化全文索引能力,以及优化部分场景下的 MATCH 性能。 强化 强化增强全文索引功能,具体 pr 参见:#5567、#5575、#5577、#5580、#5584、#5587 优化 支持使用 MATCH 子句检索 VID 或属性索引时使用变量&am…