基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
管理一级分区表
更新时间:2026-06-28 11:20:06
分区表创建成功后,您可以对一级分区表进行添加、删除或 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,并添加分区M197106。obclient> CREATE TABLE tbl1_r (id INT NOT NULL,value varchar(50),time TIMESTAMP NOT NULL) PARTITION BY RANGE(UNIX_TIMESTAMP(time)) (PARTITION M197101 VALUES LESS THAN(UNIX_TIMESTAMP('1971/02/01')), PARTITION M197102 VALUES LESS THAN(UNIX_TIMESTAMP('1971/03/01')), PARTITION M197103 VALUES LESS THAN(UNIX_TIMESTAMP('1971/04/01')), PARTITION M197104 VALUES LESS THAN(UNIX_TIMESTAMP('1971/05/01')), PARTITION M197105 VALUES LESS THAN(UNIX_TIMESTAMP('1971/06/01')) ); Query OK, 0 rows affected在
tbl1_r表中添加分区M197106。obclient> ALTER TABLE tbl1_r ADD PARTITION (PARTITION M197106 VALUES LESS THAN(UNIX_TIMESTAMP('1971/07/01'))); Query OK, 0 rows affected在
tbl1_r表中查看已添加的分区M197106。obclient> show create table tbl1_r\G *************************** 1. row *************************** Table: tbl1_r Create Table: CREATE TABLE `tbl1_r` ( `id` int(11) NOT NULL, `value` varchar(50) DEFAULT NULL, `time` timestamp NOT NULL ) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 partition by range(UNIX_TIMESTAMP(time)) (partition M197101 values less than (1612108800), partition M197102 values less than (1614528000), partition M197103 values less than (1617206400), partition M197104 values less than (1619798400), partition M197105 values less than (1622476800), partition M197106 values less than (1625068800)) 1 row in set向
tbl1_log_rc表的M197106分区插入数据。obclient> INSERT INTO tbl1_r VALUES (1,'1','1971/06/02'); Query OK, 1 row affected查看数据落入的
M197106分区。obclient> SELECT * FROM tbl1_r partition(M197106); +----+-------+---------------------+ | id | value | time | +----+-------+---------------------+ | 1 | 1 | 1971-06-02 00:00:00 | +----+-------+---------------------+ 1 row in set向 List 分区中添加一级分区。创建 List 分区表
tbl1_l2,并添加分区p2和p3。obclient> CREATE TABLE tbl1_l2 (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在
tbl1_l2表中添加分区p2与p3。obclient> ALTER TABLE tbl1_l2 ADD PARTITION (PARTITION p2 VALUES IN (7,8), PARTITION p3 VALUES IN (DEFAULT) ); Query OK, 0 rows affected在
tbl1_r表中查看已添加的分区p2与p3。obclient> show create table tbl1_l2\G *************************** 1. row *************************** Table: tbl1_l2 Create Table: CREATE TABLE `tbl1_l2` ( `col1` int(11) NOT NULL, `col2` varchar(50) DEFAULT NULL, PRIMARY KEY (`col1`) ) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 partition by list(col1) (partition p0 values in (1,2,3), partition p1 values in (5,6), partition p2 values in (7,8), partition p3 values in (DEFAULT)) 1 row in set向
tbl1_l2表的p2与p3分区插入数据。obclient> insert into tbl1_l2 values(8,'8'), (9,'9'); Query OK, 2 rows affected (0.01 sec) Records: 2 Duplicates: 0 Warnings: 0查看数据落入的
p2与p3分区。obclient> SELECT * FROM tbl1_l2 partition(p2,p3); +------+------+ | col1 | col2 | +------+------+ | 8 | 8 | | 9 | 9 | +------+------+ 2 rows in set
删除一级分区
语法
ALTER TABLE table_name DROP PARTITION partition_name_list;
partition_name_list:
partition_name [, partition_name ...]
说明
- 删除一级分区时,可以删除一个或多个分区,但不能删除全部分区。
- 删除一级分区时,请尽量避免该分区上存在活动的事务或查询,否则可能会导致 SQL 语句报错,或者出现一些异常情况。
- 删除分区时,会同时删除分区中的数据,如果只需要删除数据,则可以使用
TRUNCATE语句。
示例
删除一级分区表 tbl1_r 中的 M197105 和 M197106。
查看
tbl1_r分区表。obclient> show create table tbl1_r\G *************************** 1. row *************************** Table: tbl1_r Create Table: CREATE TABLE `tbl1_r` ( `id` int(11) NOT NULL, `value` varchar(50) DEFAULT NULL, `time` timestamp NOT NULL ) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 partition by range(UNIX_TIMESTAMP(time)) (partition M197101 values less than (1612108800), partition M197102 values less than (1614528000), partition M197103 values less than (1617206400), partition M197104 values less than (1619798400), partition M197105 values less than (1622476800), partition M197106 values less than (1625068800)) 1 row in set删除一级分区表
tbl1_r中的M197105和M197106。obclient> ALTER TABLE tbl1_r DROP PARTITION M197105,M197106; Query OK, 0 rows affected查看运行结果。
obclient>show create table tbl1_r\G *************************** 1. row *************************** Table: tbl1_r Create Table: CREATE TABLE `tbl1_r` ( `id` int(11) NOT NULL, `value` varchar(50) DEFAULT NULL, `time` timestamp NOT NULL ) DEFAULT CHARSET = utf8mb4 ROW_FORMAT = DYNAMIC COMPRESSION = 'zstd_1.3.8' REPLICA_NUM = 1 BLOCK_SIZE = 16384 USE_BLOOM_FILTER = FALSE TABLET_SIZE = 134217728 PCTFREE = 0 partition by range(UNIX_TIMESTAMP(time)) (partition M197101 values less than (1612108800), partition M197102 values less than (1614528000), partition M197103 values less than (1617206400), partition M197104 values less than (1619798400)) 1 row in set 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 中 M197101 和 M197102 分区的数据。
查询一级分区表
tbl1_r中M197101和M197102分区的数据。obclient> select * from tbl1_r partition(M197101,M197102); +----+--------+---------------------+ | id | value | time | +----+--------+---------------------+ | 1 | 张三 | 0000-00-00 00:00:00 | | 2 | 李四 | 0000-00-00 00:00:00 | +----+--------+---------------------+ 2 rows in set清除一级分区表
tbl1_r中M197101和M197102分区的数据。obclient> ALTER TABLE tbl1_r TRUNCATE PARTITION M197101,M197102; Query OK, 0 rows affected查看运行结果。
obclient> select * from tbl1_r partition(M197101,M197102); Empty set