本文介绍了ALTER TABLEGROUP语句的用法。本语法仅适用于AUTO模式数据库。
分区组分裂
Range分区
- 支持将分区分裂成指定范围的多个分区。
语法:
ALTER TABLEGROUP tg_name split PARTITION identifier INTO (partition_definition,partition_definition, [, partition_definition] ...); partition_definition: PARTITION partition_name [VALUES {LESS THAN {(value_list) | MAXVALUE} | IN (value_list)}]
示例:
假设表组tg1中的p1的定义为partition p1 values less than(20),可以通过以下语句将p1分裂成p10,p11,p12。
ALTER TABLEGROUP tg1 split PARTITION p1 into (partition p10 values less than (8), partition p11 values less than(15), partition p12 values less than(20))
- 支持将一个Range在其范围内按任意点一分为二。
语法:
ALTER TABLEGROUP identifier split PARTITION identifier at(number) into (PARTITION identifier, PARTITION identifier);
示例:
假设表组tg1中的p1的定义为partition p1 values less than(20),若需要将p1分区在9这个点一分为2,即p11:[0,9),p12:[9,20),SQL如下:
该SQL也等价于:ALTER TABLEGROUP tg1 split PARTITION p1 at(9) into (partition p11, partition p12)
ALTER TABLEGROUP tg1 split PARTITION p1 into (partition p11 values less than (9), partition p12 values less than(20));
对于List分区,支持对普通分区或default分区进行分裂:
语法:
ALTER TABLEGROUP tg_name split PARTITION partition_name into (partition_definition,partition_definition, [, partition_definition] ...);
示例:
假如表组tg1中的p1, p2, pd分别定义为
partition p1 values in(1, 2, 3, 4, 5, 6), partition p2 values in(7,8,9), partition pd values in(default),
,可以通过以下语法将p1分裂成p10,p11,p12。ALTER TABLEGROUP tg1 split PARTITION p1 into (partition p10 values in (1,3,5), partition p11 values in (2,4), partition p12 values in (6))
对于分区pd,因为它是default分区,这表示除1~9之外的分区键对应的值应当全部分布在default分区。PolarDB-X允许对default分区进行分裂,分裂会使得default分区内的部分数据迁移至新分区,例如通过下面的SQL,可以将10~15从pd中分裂出来:
ALTER TABLEGROUP tg1 SPLIT PARTITION pd INTO (PARTITION pd0 VALUES IN (10,11,12), PARTITION pd1 VALUES IN (13,14,15), PARTITION pd2 VALUES IN (default))
- 支持将特定的value对应的数据提取到一个单独的分区:
语法:
ALTER TABLEGROUP identifier EXTRACT TO PARTITION pnew BY [HOT] VALUE(value_list);
示例:
假如表组tg1中的p1, p2, pd分别定义为
partition p1 values in(1, 2, 3, 4, 5, 6), partition p2 values in(7,8,9), partition pd values in(default)
,可以使用如下SQL,将value=2提取到单独的分区pnew:ALTER TABLEGROUP tg1 EXTRACT TO PARTITION pnew BY HOT VALUE(2);
- 支持用分区键的Hash range的中值作为分裂点,将一个分区切分为两个分区。
语法:
ALTER TABLEGROUP identifier split PARTITION identifier;
示例:
ALTER TABLEGROUP tg1 split PARTITION p1;
- 支持将热点值提取到单独的分区。
ALTER TABLEGROUP tgName extract to PARTITION [newPartName] by hot value(xxx)
- 支持将热点值提取到单独的分区。
语法:
ALTER TABLEGROUP tgName extract to PARTITION [newPartName] by hot value(xxx[,..,xxx]);
示例:
假设拆分键为(a,b),key拆分方式,将拆分键值为(a=88,b=10)的数据,提取到一个单独的新分区p20中。
ALTER TABLEGROUP tg1 extract to PARTITION p20 by hot value(88,10);
- 支持将热点散列到多个分区。
语法:
N为将热点值散列为N个分区。
ALTER TABLEGROUP tgName split into [newPartNamePrefix] PARTITIONS N by hot value(xxx[,..,xxx]);
假设拆分键为(a,b),key拆分方式。假设a=88对应的数据很多,将a=88的数据散列到5个分区的语法为
ALTER TABLEGROUP tgName split into hot88_ PARTITIONS 5 by hot value(88)
,这个语法会将a=88的数据散列到5个新的分区,hot88_1,hot88_2,hot88_3,hot88_4,hot88_5,这5个分区是按照b的hash空间五等分切分的。
分区合并
语法:
将多个分区(两个或者两个以上)合并成一个分区。
ALTER TABLEGROUP tg_name MERGE PARTITIONS partition_name,...,partition_name TO partition_name;
示例:
ALTER TABLEGROUP tbl_tg MERGE PARTITIONS p2,p3 to p23;
分区迁移
语法:
将分区迁移到指定的DN节点。
ALTER TABLEGROUP tg_name MOVE PARTITIONS partition_name,...,partition_name TO dn_id;
示例:
ALTER TABLEGROUP tg_name MOVE PARTITIONS p2,p4 to 'dn-0' ;
增加分区
对于Range、List策略的分区组,支持增加分区。
在List策略的分区中,如果当前已经包含default分区,新添加一个分区pnew,会使得default分区中,与pnew分区定义重合的数据迁移至pnew分区;在List策略的分区中,如果当前不包含default分区,则最多可添加1个default分区。
ALTER TABLEGROUP tg_name ADD PARTITION (partition_definition [,partition_definition] ...)
删除分区
对于对Range/List分区策略的分区组,支持删除分区。
ALTER TABLEGROUP tg_name DROP PARTITION partition_name [,partition_name] ...
重命名分区
ALTER TABLEGROUP tg_name RENAME PARTITION old_part_name to new_part_name[, old_part_name to new_part_name]
修改分区值
只支持对List/List column分区策略的分区修改分区值。
ALTER TABLEGROUP tg_name MODIFY PARTITION partition_name ADD/DROP VALUES (value_list)