金仓数据库KingbaseES 分区表的分区管理(一)
关键字:
KingbaseES、分区表、增加分区、挂载分区、删除分区、摘除分区、人大金仓、KingbaseES
分区表介绍
分区表是在一个节点内部对数据按照用户指定策略做进一步的水平分区,将表中数据按照指定方式划分为多个互不重叠的部分。
在KingbaseES数据库中,分区能够将大表和索引分解成更小、更易于管理子分区。每个分区是一个独立的对象,具有其自己的名称和存储特征。在KingbaseES数据中提供了多条命令,进行分区表的分区管理。本文主要介绍分区表的分区管理,包括:增加分区、挂载分区、删除分区、摘除分区。
增加分区
在KingbaseES数据库中,分区表可以在创建完成后为其增加分区。增加分区的命令有两种:1. 使用CREATE TABLE … PARTITION OF …命令增加现有分区表的分区、2. 使用ALTER TABLE … ADD PARTITION …命令增加表分区。
增加分区需要在执行命令前存在待增加表分区的分区表,需要在命令中明确增加表分区的分区约束。
示例:创建分区表partitioned_table,并为使用两种增加表分区的方法为其增加分区p1和p2。
--创建分区表partitioned_table CREATE TABLE partitioned_table ( id serial, user_id int, create_time timestamp(0) ) PARTITION BY RANGE(create_time); --使用CREATE TABLE命令增加表分区 CREATE TABLE partitioned_table_p1 partition of partitioned_table FOR VALUES FROM ('2020-01-01') TO ('2021-01-01'); --使用ALTER TABLE命令增加表分区 ALTER TABLE partitioned_table ADD PARTITION p2 VALUES LESS THAN ('2022-01-01'); \d+ partitioned_table –查看分区表partitioned_table可以看到成功增加分区 |
示例中红色部分是分区约束。
挂载分区
在KingbaseES数据库中,也可以使用CREATE TABLE命令创建与分区表相同结构的表,然后使用ALTER TABLE … ATTACH PARTITION … 挂载分区达到增加分区的目的。
--创建待挂载的表partitioned_table_p3 CREATE TABLE partitioned_table_p3 ( id serial, user_id int, create_time timestamp(0) ); --使用ALTER TABLE … ATTACH PARTITION … 挂载分区 ALTER TABLE partitioned_table ATTACH PARTITION partitioned_table_p3 FOR VALUES FROM ('2022-01-01') TO ('2023-01-01'); |
需要注意,如果被挂载的表中存在数据,数据也会加入到分区表中。
--创建待挂载的表partitioned_table_p4 CREATE TABLE partitioned_table_p4 ( id serial, user_id int, create_time timestamp(0) ); Insert into partitioned_table_p4 values(4, 4, '2023-05-01'); --使用ALTER TABLE … ATTACH PARTITION … 挂载分区 ALTER TABLE partitioned_table ATTACH PARTITION partitioned_table_p4 FOR VALUES FROM ('2023-01-01') TO ('2024-01-01'); --查询分区表中的数据 select * from partitioned_table; |
若表中存在不符合分区约束的数据,会挂载失败。
--创建待挂载的表partitioned_table_p5 CREATE TABLE partitioned_table_p5 ( id serial, user_id int, create_time timestamp(0) ); Insert into partitioned_table_p5 values(5, 5, '2023-05-01'); --使用ALTER TABLE … ATTACH PARTITION … 挂载分区 ALTER TABLE partitioned_table ATTACH PARTITION partitioned_table_p5 FOR VALUES FROM ('2024-01-01') TO ('2025-01-01'); |
删除分区
在KingbaseES数据库中,可以使用ALTER TABLE … DROP PARTITION … 命令从分区表中删除一个分区,也可以使用DROP TABLE 表分区的名称删除分区。
--使用ALTER TABLE … DROP PARTITION …删除分区 ALTER TABLE partitioned_table DROP PARTITION p1; --使用DROP TABLE命令删除分区 DROP TABLE partitioned_table_p2; --查看现有分区,可以看到分区p1和p2不存在了。 \d+ partitioned_table |
摘除分区
在KingbaseES数据库中,可以使用ALTER TABLE … DETACH … 命令可以将表分区从分区表上脱离出来。需要注意分区表中的数据也会随着表分区脱离出来。
--使用ALTER TABLE … DETACH … 命令摘除分区 ALTER TABLE partitioned_table DETACH PARTITION partitioned_table_p4; --查询分区表,数据已经消失 Select * from partitioned_table; --查询脱离出来的表分区,可以发现数据 Select * from partitioned_table_p4; |
总结
在KingbaseES中提供了多条命令进行分区表分区管理,本文主要介绍了表分区增加和移除的相关命令。