更新时间:2025-05-29 GMT+08:00
列表分区
列表分区(List Partition)允许用户在每个分区的描述里,为分区键指定离散值列表,从而控制数据行如何被映射到各个分区。这种分区方式的优势在于,它能以枚举分区值的形式对数据进行分区操作,尤其适合对无序且不相关的数据集进行分组与组织。
在处理分区键值时,若某些值未被定义在列表之中,用户可以借助默认分区(DEFAULT)来存储这些数据。通过这种方式,所有未能映射到其他任何分区的行都不会导致错误产生。示例如下:
gaussdb=# CREATE TABLE bmsql_order_line ( ol_w_id INTEGER NOT NULL, ol_d_id INTEGER NOT NULL, ol_o_id INTEGER NOT NULL, ol_number INTEGER NOT NULL, ol_i_id INTEGER NOT NULL, ol_delivery_d TIMESTAMP, ol_amount DECIMAL(6,2), ol_supply_w_id INTEGER, ol_quantity INTEGER, ol_dist_info CHAR(24) ) PARTITION BY LIST(ol_d_id) ( PARTITION p0 VALUES (1,4,7), PARTITION p1 VALUES (2,5,8), PARTITION p2 VALUES (3,6,9), PARTITION p3 VALUES (DEFAULT) ); --删除表。 gaussdb=# DROP TABLE bmsql_order_line;
上述例子和之前给出的哈希分区的例子类似,同样依据ol_d_id列来进行分区。但是在List分区中直接通过对ol_d_id的可能取值范围进行限定,不在列表中的数据会进入p3分区(DEFAULT)。
相比哈希分区,列表分区对分区键的可控性更强,通常能够精准地把目标数据存放在预期的分区中。然而,要是列表中的取值较多,分区定义工作就会变得繁琐。在这种情形下,建议采用哈希分区。
总体而言,列表分区和哈希分区常用于对无序、不相关的数据集进行分组与组织。

列表分区在分区键设置上有明确的数量限制,其分区键最多可支持16列。并且,分区键列数不同时,子分区定义时列表中枚举值对NULL值的处理规则也不同。当分区键仅定义为1列时,子分区列表里的枚举值不允许为NULL值;而当分区键定义为多列时,子分区列表中的枚举值则允许存在NULL值。
父主题: 分区策略