本文介绍了ALTER TABLEGROUP语句的用法。

分区组分裂

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如下:
    ALTER TABLEGROUP tg1 split PARTITION p1 at(9) into (partition p11, partition p12)
    该SQL也等价于:
    ALTER TABLEGROUP tg1 split PARTITION p1 into
    (partition p11 values less than (9),
    partition p12 values less than(20));
List分区
  • 语法:
    ALTER TABLEGROUP tg_name split PARTITION partition_name into
     (partition_definition,partition_definition, [, partition_definition] ...);
  • 示例:

    假设表组tg1中的p1的定义为partition p1 values in(1, 2, 3, 4, 5, 6),可以通过以下语法将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))
Hash分区
  • 支持用分区键的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)
key分区
  • 支持将热点值提取到单独的分区。

    语法:

    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空间五等分切分的。

  • 支持表级别的操作,N表示将热点值散列为N个分区。
    ALTER tableName split into [newPartNamePrefix] PARTITIONS N by hot value(xxx[,..,xxx]);
    说明 表级别的操作要求表所在的TABLEGROUP只有当前表一个表,没有其他表。

分区合并

语法:

将多个分区(两个或者两个以上)合并成一个分区。

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策略的分区组,支持增加分区。

ALTER TABLEGROUP tg_name ADD PARTITION (partition_definition [,partition_definition] ...)

删除分区

对于Range/List策略的分区组,支持删除分区。

ALTER TABLEGROUP tg_name DROP PARTITION partitiion_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_name add/drop values in (value_list)