云数据库 GAUSSDB-创建分区表:创建分区表
创建分区表
SQL语言具备强大且灵活多样的功能,其语法树往往较为复杂,分区表亦是如此。分区表的创建可视为在原有非分区表的基础上增添表分区属性。所以,分区表的语法接口可看作是对原有非分区表CREATE TABLE语句的扩展,具体是增加了PARTITION BY语句部分,同时需指定与分区相关的三个核心元素:
- 分区类型(partType):用于描述分区表所采用的分区策略,主要包括范围分区、列表分区和哈希分区。
- 分区键(partKey):用于确定分区表的分区列。目前,范围分区和列表分区支持多列(不超过16列)作为分区键,而哈希分区仅支持单列分区。
- 分区表达式(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 ] /* 范围分区场景 */ PARTITION BY RANGE (partKey) ( { partition_start_end_item [, ... ] | partition_less_then_item [, ... ] } ) /* 列表分区场景 */ PARTITION BY LIST (partKey) ( PARTITION partition_name VALUES (list_values_clause) [ TABLESPACE tablespace_name [, ... ] ] ... ) /* 哈希分区场景 */ PARTITION BY HASH (partKey) ( PARTITION partition_name [ TABLESPACE tablespace_name [, ... ] ] ... ) /* 开启/关闭分区表行迁移 */ [ { ENABLE | DISABLE } ROW MOVEMENT ];
- 范围分区和列表分区最大支持16个分区键,而哈希分区只支持1个分区键。
- 除哈希分区外,分区键不能插入空值,否则DML语句会进行报错处理。但是当范围分区表定义了MAXVALUE分区,或者列表分区表定义了DEFAULT分区时,允许插入空值。
- 分区数最大值为1048575个,可以满足大部分业务场景的诉求。但随着分区数的增加,系统中的文件数量也会相应增多,从而对系统性能产生影响。所以,一般不建议单个表的分区数超过200个。