DWS存储分区表

举报
ACBD 发表于 2021/06/28 16:31:38 2021/06/28
【摘要】 一、什么是分区表分区表是将数据基于范围映射到每一个分区,范围在是由创建时指定的分区键决定的,通常分区键采用时间、日期等。同时普通表无法转换为分区表,只能通过创建新的分区表将普通表中的数据导入到分区表中。所以需要根据业务提前规划是否使用分区表。二、分区表的优势分区表相比较普通表的优势十分显著,主要包括一些几个方面。改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,很大程度上提高检索效率。

一、什么是分区表

GaussDB(DWS)数据库支持的分区表为范围分区表。范围分区表即为将数据基于范围映射到每一个分区,这个范围是由创建分区表时指定的分区键决定的。这种分区方式是最为常用的,并且分区键经常采用日期,例如将销售数据按照月份进行分区。同时普通表无法转换为分区表,只能通过创建新的分区表将普通表中的数据导入到分区表中。所以需要根据业务提前规划是否使用分区表。

二、分区表的优势

分区表相比较普通表的优势十分显著,主要包括一些几个方面。

改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,很大程度上提高检索效率。

增强可用性:如果分区表的某个分区出现故障,表在其他分区的数据仍然可用。

方便维护:如果分区表的某个分区出现故障,需要修复数据,只修复该分区即可。

均衡I/O:可以把不同的分区映射到不同的磁盘以平衡I/O,改善整个系统性能。

三、分区表操作

CREATE TABLE staffS_p1

(

  staff_ID       NUMBER(6) not null,

  FIRST_NAME     VARCHAR2(20),

  LAST_NAME      VARCHAR2(25),

  EMAIL          VARCHAR2(25),

  PHONE_NUMBER   VARCHAR2(20),

  HIRE_DATE      DATE,

  employment_ID  VARCHAR2(10),

  SALARY         NUMBER(8,2),

  COMMISSION_PCT NUMBER(4,2),

  MANAGER_ID     NUMBER(6),

  section_ID     NUMBER(4)

)

PARTITION BY RANGE (HIRE_DATE)

(

   PARTITION HIRE_19950501 VALUES LESS THAN ('1995-05-01 00:00:00'),

   PARTITION HIRE_19950502 VALUES LESS THAN ('1995-05-02 00:00:00'),

   PARTITION HIRE_maxvalue VALUES LESS THAN (MAXVALUE)

);

该表是一个典型的分区表,以时间作为分区键。

分区表和普通表一样支持增删改查,在该基础上可以对单个分区进行查询。

  • Select * from staffS_p1 partition HIRE_19950502;

即可查询staffS_p1表上HIRE_19950502分区里的所有数据。

alter语法可以删除分区,同时也包括分区里的所有数据。

  • alter table drop partition 

同时有split语法可以将一个分区分割为多个分区

  • alter table staffS_p1 split partition HIRE_maxvalue at('1995-05-03 00:00:00')into(partition HIRE_19950503,partition HIRE_maxvalue1);

将原来的HIRE_maxvalue分区以1995-05-03 00:00:00为切割点分割成两部分。

既然可以将一个分区分割为多个分区,就意味着也可以将多个分区合并成一个分区,通过merge into语法即可实现。

  • Alter table staffS_p1 merge partitions HIRE_19950501,HIRE_19950502 into partition HIRE_19950502;

HIRE_19950501,HIRE_19950502两个分区合并成HIRE_19950502一个分区。

  • alter table staffS_p1 exchange partition (HIRE_19950502) with table normal_tbl;

exchange语法可以将普通表和分区表进行交换,但exchange对普通表要求比较高,有如下一些条件:

  • 普通表和分区的列数目相同,对应列的信息严格一致,包括:列名、列的数据类型、列约束、列的Collation信息、列的存储参数、列的压缩信息等。
  • 普通表和分区的表压缩信息严格一致。
  • 普通表和分区的分布列信息严格一致。
  • 普通表和分区的索引个数相同,且对应索引的信息严格一致。
  • 普通表和分区的表约束个数相同,且对应表约束的信息严格一致。
  • 普通表不可以是临时表和unlogged表。
  • 交换分区的普通表和分区表必须在同一个逻辑集群或节点组(NodeGroup)中。

完成交换后,普通表和分区的数据被置换,同时普通表和分区的表空间信息被置换。此时,普通表和分区的统计信息变得不可靠,需要对普通表和分区重新执行analyze。同时需要注意的是,需要进行exchange的表的表结构在创建时就必须匹配,如果执行了ddl操作,则无法进行exchange。 

以上一些分区表的语法很大程度上提高了分区表的可用性与灵活性,加强了分区表的功能,方便了用户使用。

   

 想了解GuassDB(DWS)更多信息,欢迎微信搜索“GaussDB DWS”关注微信公众号,和您分享最新最全的PB级数仓黑科技,后台还可获取众多学习资料哦~

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。