列表分区
列表分区是指在分区时将分区键的各种取值罗列出来,指定每个取值或几个取值对应一个分区,各个分区中的记录有一个共性,那就是其分区键字段的取值都是分区的条件值或是条件值之一,列表分区主要针对分区键的取值为有限的离散值的情况。
说明:
正常情况下,各个记录应归属于所有列表分区中的某一个分区,但由于列表分区的条件值是离散的,若某记录的取值不符合任何一个分区的分区条件,则它将不归属于任何一个分区,该记录只能丢失才能保证数据的正确性,为避免此情况的发生,引入异常分区,当记录不满足任何一个分区的条件时,将其归入
OTHERVALUES
异常分区。
语法格式
sql
list_partitioning_clause::=
PARTITION BY LIST (name_list) PARTITIONS (list_parti_item[,list_parti_item]...)[opt_subpartitioning_clause]
list_parti_item::=
(parti_values)
| colid VALUES (parti_values)
| (OTHERVALUES)
| colid VALUES (OTHERVALUES)
参数说明
PARTITION BY LIST
:关键字,用于指定使用列表分区。name_list
:一个或多个列的列表,用于分区的列。PARTITIONS
:关键字,用于指定分区列表。list_parti_item
:每个分区的定义。(parti_values)
:一个包含具体值的列表,用于定义分区。colid VALUES (parti_values)
:指定列 colid 的值列表。(OTHERVALUES)
:一个特殊的分区,用于捕获所有其他未指定的值。colid VALUES (OTHERVALUES)
:指定列 colid 的其他值。opt_subpartitioning_clause
:描述所有分区进行子分区时使用的子分区模板,即各个分区无需分别描述其子分区,它们使用的子分区皆遵守子分区模板。当分区描述子句中含有子分区描述时,子分区模板将对该分区无效。
示例
创建一个带列表分区的分区表,分区键为city,根据分区键值划分4个分区,当分区键值为“四川”、“云南”、“贵州”时数据分别存储在划定分区中,若为其他值则存储在OTHERVALUES分区。
sql
CREATE TABLE test_part1(
id INT,
name VARCHAR(20),
city CHAR(20)
)
PARTITION BY LIST (city)
PARTITIONS(('四川'),('云南'),('贵州'),(OTHERVALUES));
说明:
若分区表设定了异常分区,则无法再增加分区,且无法删除异常分区。