基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
管理一级分区表
更新时间:2023-07-18 17:25:59
分区表创建成功后,您可以对一级分区表进行添加、删除或 Truncate 分区操作。
各类型分区支持操作情况
| 分区类型 | 添加一级分区 | 删除一级分区 | Truncate 一级分区 |
|---|---|---|---|
| Range 分区 | 支持 | 支持 | 支持 |
| Range Column 分区 | 支持 | 支持 | 支持 |
| List 分区 | 支持 | 支持 | 支持 |
| List Columns 分区 | 支持 | 支持 | 支持 |
| Hash 分区 | 不支持 | 不支持 | 不支持 |
| Key 分区 | 不支持 | 不支持 | 不支持 |
添加一级分区
语法
ALTER TABLE table_name ADD PARTITION (partition_option);
partition_option:
range_partition_option | list_partition_option
range_partition_option:
( PARTITION partition_name VALUES LESS THAN partition_expr
[, PARTITION partition_name VALUES LESS THAN partition_expr]...
)
list_partition_option:
(PARTITION partition_name VALUES IN partition_expr
[, PARTITION partition_name VALUES IN partition_expr]...
)
说明
对于 Range/Range Columns 分区,只能在最大的分区之后添加一个分区,不可以在中间或者开始的地方添加。如果当前的分区中有
MAXVALUE的分区,则不能继续添加分区。List/List Columns 分区添加一级分区时,要求添加的分区不与之前的分区冲突即可。如果一个 List/List Columns 分区有默认分区即
Default Partition,则不能添加任何分区。在 Range/Range Columns/List/List Columns 分区中添加一级分区不会影响全局索引和局部索引的使用。
示例
向 Range 分区中添加一级分区。创建 Range 分区表
tbl1_r,并添加分区M202106。obclient> CREATE TABLE tbl1_r (id INT NOT NULL,value varchar(50),time TIMESTAMP NOT NULL) PARTITION BY RANGE(UNIX_TIMESTAMP(time)) (PARTITION M202101 VALUES LESS THAN(UNIX_TIMESTAMP('2021/02/01')), PARTITION M202102 VALUES LESS THAN(UNIX_TIMESTAMP('2021/03/01')), PARTITION M202103 VALUES LESS THAN(UNIX_TIMESTAMP('2021/04/01')), PARTITION M202104 VALUES LESS THAN(UNIX_TIMESTAMP('2021/05/01')), PARTITION M202105 VALUES LESS THAN(UNIX_TIMESTAMP('2021/06/01')) ); Query OK, 0 rows affected obclient> ALTER TABLE tbl1_r ADD PARTITION (PARTITION M202106 VALUES LESS THAN(UNIX_TIMESTAMP('2021/07/01'))); Query OK, 0 rows affected向 List 分区中添加一级分区。创建 List 分区表
tbl1_l,并添加分区p2和p3。obclient> CREATE TABLE tbl1_l (col1 INT PRIMARY KEY,col2 VARCHAR(50)) PARTITION BY LIST(col1) (PARTITION p0 VALUES IN (1,2,3), PARTITION p1 VALUES IN (5,6) ); Query OK, 0 rows affected obclient> ALTER TABLE tbl1_l ADD PARTITION (PARTITION p2 VALUES IN (7,8), PARTITION p3 VALUES IN (DEFAULT) ); Query OK, 0 rows affected
删除一级分区
语法
ALTER TABLE table_name DROP PARTITION partition_name_list;
partition_name_list:
partition_name [, partition_name ...]
说明
删除一级分区时,可以删除一个或多个分区,但不能删除全部分区。
删除一级分区时,请尽量避免该分区上存在活动的事务或查询,否则可能会导致 SQL 语句报错,或者出现一些异常情况。
删除分区时,会同时删除分区中的数据,如果只需要删除数据,则可以使用
TRUNCATE语句。
示例
删除一级分区表 tbl1_r 中的 M202105 和 M202106。
obclient> ALTER TABLE tbl1_r DROP PARTITION M202105,M202106;
Query OK, 0 rows affected
Truncate 一级分区
语法
ALTER TABLE table_name TRUNCATE PARTITION partition_name_list;
partition_name_list:
partition_name [, partition_name ...]
说明
Truncate 一级分区时,可以将一个或多个分区中的数据清空。
在 Truncate 一级分区时,请尽量避免该分区上存在活动的事务或查询,否则可能会导致 SQL 语句报错,或者出现一些异常情况。
示例
清除一级分区表 tbl1_r 中 M202101 和 M202102 分区的数据。
obclient> ALTER TABLE tbl1_r TRUNCATE PARTITION M202101,M202102;
Query OK, 0 rows affected