云数据库 GAUSSDB(FOR MYSQL)-LIST DEFAULT HASH:创建LIST DEFAULT HASH分区表

时间:2024-08-02 14:03:56

创建LIST DEFAULT HASH分区表

  • 语法
    CREATE TABLE [ schema. ]table_name
     table_definition
       PARTITION BY LIST [COLUMNS] (expr)
       SUBPARTITION BY ...
       (list_partition_definition[, ..., list_partition_definition],
        default_partition_definition
       )

    其中,default_partition_definition为:

    PARTITION partition_name DEFAULT [PARTITIONS number]

    每个分区的定义也可以包含二级分区, 二级分区也支持使用LIST DEFAULT分区,定义如下:

    SUBPARTITION subpartition_name DEFAULT
    表2 参数说明

    参数名称

    参数说明

    table_name

    要创建的表名称。

    partition_name

    • 只有一个DEFAULT分区时,表示分区名称。不可与其他分区表重复。
    • 当有多个DEFAULT分区时,表示分区名称前缀。“partition_name+序号”表示分区名称。

    subpartition_name

    子分区名称。同一个表中不可重复,子分区最多只支持一个DEFAULT分区。

    number

    DEFAULT分区按照哈希规则分成number个分区,通过number指定分区个数。PARTITIONS number是可选项,不指定时,则默认为一个DEFAULT分区。

  • 示例

    创建单个DEFAULT分区示例如下:

    CREATE TABLE list_default_tbl (
      a INT,
      b INT
    )
    PARTITION BY LIST (a)
    (PARTITION p0 VALUES IN (1,2,3,4,5),
     PARTITION p1 VALUES IN (6,7,8,9,10),
     PARTITION pd DEFAULT);

    创建多个DEFAULT分区示例如下:

    CREATE TABLE list_default_hash (
      a INT,
      b INT
    )
    PARTITION BY LIST (a)
    (PARTITION p0 VALUES IN (1,2,3,4,5),
     PARTITION p1 VALUES IN (6,7,8,9,10),
     PARTITION pd DEFAULT PARTITIONS 3);

    使用LIST COLUMNS示例如下:

    CREATE TABLE t_goods
    (
      country   VARCHAR(30),
      year      VARCHAR(60),
      goods     TEXT
    ) PARTITION BY LIST COLUMNS(country)
    (
      PARTITION p1 VALUES IN ('China'),
      PARTITION p2 VALUES IN ('USA'),
      PARTITION p3 VALUES IN ('Asia'),
      PARTITION p3 VALUES IN ('India'),
      PARTITION p_deft DEFAULT PARTITIONS 5
    );

    通过explain查看分区:

    EXPLAIN SELECT * FROM list_default_hash;

    显示结果如下:

    +----+-------------+-------------------+-------------------+------+---------------+------+---------+------+------+----------+-------+
    | id | select_type | table             | partitions        | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra |
    +----+-------------+-------------------+-------------------+------+---------------+------+---------+------+------+----------+-------+
    |  1 | SIMPLE      | list_default_hash | p0,p1,pd0,pd1,pd2 | ALL  | NULL          | NULL | NULL    | NULL |    1 |   100.00 | NULL  |
    +----+-------------+-------------------+-------------------+------+---------------+------+---------+------+------+----------+-------+
    1 row in set (0.04 sec)

    二级分区支持LIST DEFAULT类型,示例如下:

    CREATE TABLE test (a int, b int)
    PARTITION BY RANGE(a)
    SUBPARTITION BY LIST(b) (
    PARTITION part0 VALUES LESS THAN (10)
    ( SUBPARTITION sub0 VALUES IN (1,2,3,4,5),
      SUBPARTITION sub1 DEFAULT),
    PARTITION part1 VALUES LESS THAN (20)
    ( SUBPARTITION sub2 VALUES IN (1,2,3,4,5),
      SUBPARTITION sub3 DEFAULT),
    PARTITION part2 VALUES LESS THAN (30)
    ( SUBPARTITION sub4 VALUES IN (1,2,3,4,5),
      SUBPARTITION sub5 DEFAULT));

    一级分区存在多个LIST DEFAULT HASH分区的情况下,仅支持HASH或KEY二级分区:

    CREATE TABLE list_default_hash_sub (
      a INT,
      b INT
    )
    PARTITION BY LIST (a)
    SUBPARTITION BY HASH (b) SUBPARTITIONS 20
    (PARTITION p0 VALUES IN (1,2,3,4,5),
     PARTITION p1 VALUES IN (6,7,8,9,10),
     PARTITION pd DEFAULT PARTITIONS 3);
support.huaweicloud.com/usermanual-gaussdbformysql/gaussdbformysql_05_0344.html