云数据库 GAUSSDB-创建分区表:创建普通分区表(创建一级分区表)

时间:2024-11-13 10:04:58

创建普通分区表(创建一级分区表)

由于SQL语言功能强大和灵活多样性,SQL语法树通常比复杂,分区表同样如此,分区表的创建可以理解成在原有非分区表的基础上新增表分区属性,因此分区表的语法接口可以看成是对原有非分区表CREATE TABLE语句进行扩展PARTITION BY语句部分,同时指定分区相关的三个核元素:
  1. 分区类型(partType):描述分区表的分区策略,分别有RANGE/INTERVAL/LIST/HASH。
  2. 分区键(partKey):描述分区表的分区列,目前RANGE/LIST分区支持多列(不超过16列)分区键,INTERVAL/HASH分区只支持单列分区。
  3. 分区表达式(partExpr):描述分区表的具体分区表方式,即键值与分区的对应映射关系。
这三部分重要元素在建表语句的Partition By Clause子句中体现,PARTITION BY partType (partKey) ( partExpr[,partExpr]…)。示例如下:
CREATE TABLE [ IF NOT EXISTS ] partition_table_name
(
    [ /* 该部分继承于普通表的Create Table */
    { column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]
    | table_constraint
    | LIKE source_table [ like_option [...] ] }[, ... ]
    ]
)
[ WITH ( {storage_parameter = value} [, ... ] ) ]
[ COMPRESS | NOCOMPRESS ]
[ TABLESPACE tablespace_name ]
/* 范围分区场景,若申明INTERVAL子句则为间隔分区场景 */
PARTITION BY RANGE (partKey) [ INTERVAL ('interval_expr') [ STORE IN (tablespace_name [, ... ] ) ] ] (
    partition_start_end_item [, ... ]
    partition_less_then_item [, ... ]
)
/* 列表分区场景,若申明AUTOMATIC则支持list自动扩展 */
PARTITION BY LIST (partKey) [ AUTOMATIC ]
(
    PARTITION partition_name VALUES (list_values_clause) [ TABLESPACE tablespace_name [, ... ] ]
...
)
/* 哈希分区场景 */
PARTITION BY HASH (partKey) (
    PARTITION partition_name [ TABLESPACE tablespace_name [, ... ] ]
...
)
/* 开启/关闭分区表行迁移 */
[ { ENABLE | DISABLE } ROW MOVEMENT ];
规格约束:
  1. RANGE/LIST分区最大支持16个分区键,INTERVAL/HASH分区均只支持1个分区键,二级分区只支持1个分区键。
  2. INTERVAL分区仅支持数值类型和日期/时间类型,INTERVAL分区不支持在二级分区表中创建。
  3. INTERVAL分区表定义不能有MAXVALUE分区,LIST自动扩展分区表不能定义有DEFAULT分区。
  4. 除哈希分区外,分区键不能插入空值,否则DML语句会进行报错处理。唯一例外:RANGE分区表定义有MAXVALUE分区/LIST分区表定义有DEFAULT分区。
  5. 分区数最大值为1048575个,可以满足大部分业务场景的诉求。但分区数增加会导致系统中文件数增加,影响系统的性能,一般对于单个表而言不建议分区数超过200。
support.huaweicloud.com/fg-gaussdb-cent-v8/gaussdb-48-0072.html