v2.0版本新特性 PARTITION BYALTER TABLE 的子命令,用来定义表上的分区和子分区,重新分区或者取消分区。

partitions是企业版特性

主键要求

分区要求的主键和寻常普通的主键不太一样:主键的唯一键标识需要作为所有表中想要分区的列的前缀,按照想要的子分区的排序。

在CockroachDB 2.0版本,你不能在创建表以后再更改表的主键。如果你表中的主键不符合要求,你并不能使用ALTER TABLE 语句去对该表定义分区和子分区

概要

图片

参数

参数 描述
table_name 想要定义分区的表
name_list 表中想要分区的列 (按照主键定义的顺序排序)
list_partitions 分区列表的名字
range_partitions Range分区的名字

所需权限

用户必须拥有表的 CREATE 权限

示例

对表定义一个列表的分区

假设我们现有一张表students_by_list,主键定义为(country, id),我们可以如下定义分区:

ALTER TABLE students_by_list PARTITION BY LIST (country)
      (PARTITION north_america VALUES IN ('CA','US'),
      PARTITION australia VALUES IN ('AU','NZ'),
      PARTITION DEFAULT VALUES IN (default));


定义现有表的Range分区

假设我们有另一张表students_by_range 并且主键定义为(expected_graduation_date, id),我们可以如下定义range分区:

ALTER TABLE students_by_range PARTITION BY RANGE (expected_graduation_date)
      (PARTITION graduated VALUES FROM (MINVALUE) TO ('2017-08-15'),
      PARTITION current VALUES FROM ('2017-08-15') TO (MAXVALUE));


定义现有表的子分区

假设我们还有另一个表students 且主键定义为(country, expected_graduation_date, id)。我们可以对这个表定义分区和子分区:

ALTER TABLE students PARTITION BY LIST (country)(
        PARTITION australia VALUES IN ('AU','NZ') PARTITION BY RANGE (expected_graduation_date)(PARTITION graduated_au VALUES FROM (MINVALUE) TO ('2017-08-15'), PARTITION current_au VALUES FROM ('2017-08-15') TO (MAXVALUE)),
        PARTITION north_america VALUES IN ('US','CA') PARTITION BY RANGE (expected_graduation_date)(PARTITION graduated_us VALUES FROM (MINVALUE) TO ('2017-08-15'), PARTITION current_us VALUES FROM ('2017-08-15') TO (MAXVALUE))
    );

给一个表重新分区

ALTER TABLE students_by_range PARTITION BY RANGE (expected_graduation_date) (
    PARTITION graduated VALUES FROM (MINVALUE) TO ('2018-08-15'),
    PARTITION current VALUES FROM ('2018-08-15') TO (MAXVALUE));

取消一个表的分区

ALTER TABLE students PARTITION BY NOTHING;

其他