VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

支持interval分区表

功能描述

interval分区是range分区的扩展。

在没有自动interval分区特性之前,在创建范围(Range)类型分区表时,用户通常会定义一个maxvalue分区,将没有落在当前关注范围内的数据,都放到该分区中,以免发生插入的元组的分区键值不能映射到任何分区的错误。然而当业务场景发生变化时,如果没有及时根据数据增长创建新的分区,就可能会导致分区表的数据发生倾斜,大多数数据都放到了这个未进行细分的maxvlaue分区中,这就违背了用户对表进行分区的初衷:用户希望各个分区的数据量均衡,这样才能加快查询。

自动interval分区可以改善这个问题,对于连续数据类型的Range分区,如果插入的新数据值与当前分区均不匹配,自动interval分区可以自动创建分区。

注意事项

列存表不支持间隔分区。

语法格式

CREATE TABLE table_name
(
  ...
)
PARTITION BY RANGE(column1)
INTERVAL ('interval_expr') [ STORE IN (tablespace_name [, … ] ) ]
(
  PARTITION partition_name1 VALUESLESS THAN ( { partition_value | MAXVALUE } )
  PARTITION partition_name2 VALUES LESS THAN ( { partition_value | MAXVALUE } )
);

参数说明

  • PARTITION BY RANGE(column1)

    指定一个range分区的列。

  • INTERVAL ('interval_expr') [ STORE IN (tablespace_name [, … ] ) ]

    间隔分区定义信息。

    • interval_expr:自动创建分区的间隔,例如:1 day、1 month。
    • STORE IN (tablespace_name [, … ] ):指定存放自动创建分区的表空间列表,如果有指定,则自动创建的分区从表空间列表中循环选择使用,否则使用分区表默认的表空间。
  • PARTITION partition_name VALUES LESS THAN ( { partition_value | MAXVALUE } )

    指定各分区的信息。partition_name为范围分区的名称。partition_value为范围分区的上边界,取值依赖于partition_key的类型。MAXVALUE表示分区的上边界,它通常用于设置最后一个范围分区的上边界。

    • 每个分区都需要指定一个上边界。

    • 分区上边界的类型应当和分区键的类型一致。

    • 分区列表是按照分区上边界升序排列的,值较小的分区位于值较大的分区之前。

示例

1、创建interval分区表。

CREATE TABLE interval_normal_exchange (logdate date not null)
PARTITION BY RANGE(logdate)
INTERVAL('1 month')
(
        PARTITION interval_normal_exchange_p1 VALUES LESS THAN('2020-03-01'),
        PARTITION interval_normal_exchange_p2 VALUES LESS THAN('2020-04-01'),
        PARTITION interval_normal_exchange_p3 VALUES LESS THAN('2020-05-01')
);

2、执行以下语句查询分区情况。

SELECT relname,parttype,partstrategy,boundaries FROM pg_partition 
WHERE parentid = (SELECT oid FROM pg_class WHERE relname = 'interval_normal_exchange')
ORDER BY relname;

返回的分区情况如下:

           relname           | parttype | partstrategy |  boundaries
-----------------------------+----------+--------------+--------------
 interval_normal_exchange    | r        | i            |
 interval_normal_exchange_p1 | p        | r            | {2020-03-01}
 interval_normal_exchange_p2 | p        | r            | {2020-04-01}
 interval_normal_exchange_p3 | p        | r            | {2020-05-01}
(4 rows)