基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
管理一级分区表
更新时间:2023-07-18 17:25:59
分区表创建成功后,您可以对一级分区表进行添加、删除或 Truncate 操作。
各类型分区支持操作情况
| 分区类型 | 添加一级分区 | 删除一级分区 | Truncate 一级分区数据 |
|---|---|---|---|
| Range 分区 | 支持 | 支持 | 支持 |
| List 分区 | 支持 | 支持 | 支持 |
| Hash 分区 | 不支持 | 不支持 | 不支持 |
添加一级分区
语法
ALTER TABLE table_name ADD partition_option;
partition_option:
range_partition_option | list_partition_option
range_partition_option:
PARTITION partition_name VALUES LESS THAN partition_expr
list_partition_option:
PARTITION partition_name VALUES partition_expr
说明
对于 Range 分区,只能在最大的分区之后添加一个分区,不可以在中间某个或者开始的地方添加。如果当前的分区中有
MAXVALUE的分区,则不能继续添加分区。List 分区添加一级分区时,要求添加的分区与之前的分区不冲突。如果一个 List 分区有默认分区即
Default Partition,则不能添加任何分区。在 Range/List 分区中添加一级分区不会影响全局索引和局部索引的使用。
示例
向 Range 分区中添加一级分区。创建 Range 分区表
tbl1_r,并添加分区M202006。obclient> CREATE TABLE tbl1_r(log_id INT,log_date DATE NOT NULL DEFAULT SYSDATE) PARTITION BY RANGE(log_date) (PARTITION M202001 VALUES LESS THAN(TO_DATE('2020/02/01','YYYY/MM/DD')) , PARTITION M202002 VALUES LESS THAN(TO_DATE('2020/03/01','YYYY/MM/DD')) , PARTITION M202003 VALUES LESS THAN(TO_DATE('2020/04/01','YYYY/MM/DD')) , PARTITION M202004 VALUES LESS THAN(TO_DATE('2020/05/01','YYYY/MM/DD')) , PARTITION M202005 VALUES LESS THAN(TO_DATE('2020/06/01','YYYY/MM/DD')) ); Query OK, 0 rows affected obclient> ALTER TABLE tbl1_r ADD PARTITION M202006 VALUES LESS THAN(TO_DATE('2020/07/01','YYYY/MM/DD')); Query OK, 0 rows affected向 List 分区中添加一级分区。创建 List 分区表
tbl1_l,并添加分区p4。obclient> CREATE TABLE tbl1_l(log_id INT,log_value VARCHAR2(20)) PARTITION BY LIST(log_value) (PARTITION p1 VALUES ('A'), PARTITION p2 VALUES ( 'B' ), PARTITION p3 VALUES ( 'C' ) ); Query OK, 0 rows affected obclient> ALTER TABLE tbl1_l ADD PARTITION p4 VALUES('D'); Query OK, 0 rows affected
删除一级分区
语法
ALTER TABLE table_name DROP PARTITION partition_name_list [UPDATE GLOBAL INDEXES];
partition_name_list:
partition_name [, partition_name ...]
说明
删除一级分区时,可以删除一个或多个分区,但不能删除全部分区。
删除一级分区时,请尽量避免该分区上存在活动的事务或查询,否则可能会导致 SQL 语句报错,或者出现一些异常情况。
删除分区时,会同时删除分区中的数据,如果只需要删除数据,则可以使用
TRUNCATE语句。对于 Oracle 模式下有全局索引的一级分区表,删除一级分区时,需要在
ALTER TABLE语句中添加UPDATE GLOBAL INDEXES关键字的方式来更新全局索引信息。如果未添加UPDATE GLOBAL INDEXES关键字,则删除分区后,该分区表上的全局索引将会处于不可用状态。
示例
删除一级分区表 tbl1_r 中的 M202005 和 M202006。
obclient> ALTER TABLE tbl1_r DROP PARTITION M202005,M202006;
Query OK, 0 rows affected
Truncate 一级分区
语法
ALTER TABLE table_name TRUNCATE PARTITION partition_name_list [UPDATE GLOBAL INDEXES];
partition_name_list:
partition_name [, partition_name ...]
说明
Truncate 一级分区时,可以将一个或多个分区中的数据清空。
在 Truncate 一级分区时,请尽量避免该分区上存在活动的事务或查询,否则可能会导致 SQL 语句报错,或者出现一些异常情况。
对于 Oracle 模式下有全局索引的一级分区表,Truncate 分区时,需要在
ALTER TABLE语句中添加UPDATE GLOBAL INDEXES关键字的方式来更新全局索引信息。如果未添加UPDATE GLOBAL INDEXES关键字,则 Truncate 分区后,该分区表上的全局索引将会处于不可用状态。
示例
清除一级分区表 tbl1_r 中 M202001 和 M202002 分区的数据并更新全局索引信息。
obclient> ALTER TABLE tbl1_r TRUNCATE PARTITION M202001,M202002 UPDATE GLOBAL INDEXES;
Query OK, 0 rows affected