Skip to content

列表分区

列表分区是指在分区时将分区键的各种取值罗列出来,指定每个取值或几个取值对应一个分区,各个分区中的记录有一个共性,那就是其分区键字段的取值都是分区的条件值或是条件值之一,列表分区主要针对分区键的取值为有限的离散值的情况。

说明:

正常情况下,各个记录应归属于所有列表分区中的某一个分区,但由于列表分区的条件值是离散的,若某记录的取值不符合任何一个分区的分区条件,则它将不归属于任何一个分区,该记录只能丢失才能保证数据的正确性,为避免此情况的发生,引入异常分区,当记录不满足任何一个分区的条件时,将其归入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));

说明:

若分区表设定了异常分区,则无法再增加分区,且无法删除异常分区。