Skip to content

自动扩展分区

虚谷数据库范围分区提供了针对日期时间类型的自动扩展分区功能,分区间隔支持HOUR、DAY、MONTH、YEAR。

说明:

对于包含固定分区的自动扩展分区表,支持删除除0号固定分区以外的其他分区的数据。

语法格式

sql
range_auto_partitioning_clause::=
    PARTITION BY RANGE (name_list) INTERVAL expr {HOUR|DAY|MONTH|YEAR} PARTITIONS (range_parti_item[,range_parti_item]...)

参数说明

  • PARTITION BY RANGE:关键字,用于指定使用范围分区。
  • name_list:一个或多个列的列表,用于分区的列。
  • [INTERVAL expr {HOUR|DAY|MONTH|YEAR}]:用于指定分区的时间间隔。
  • PARTITIONS (range_parti_item[,range_parti_item]...):分区定义
  • (parti_values):一个包含具体值的列表,用于定义分区。

示例

  • 示例1
    创建一个以时间为分区键的自动扩展分区表range_test。1970-01-01 00:00:00这个时间点以前的数据落在一个区间内,1970-01-01 00:00:00时间点包含该时间以后的数据以5天为间隔进行分区。

    sql
    -- 创建包含固定分区的自动扩展分区表
    CREATE TABLE range_test(id INT,create_time DATETIME)PARTITION BY RANGE(create_time)INTERVAL 5 DAY PARTITIONS(('1970-01-01 00:00:00'));
    
    -- 查看表分区信息
    SELECT * from SYS_PARTIS;
    
    DB_ID | TABLE_ID | PARTI_NO | PARTI_NAME | PARTI_VAL | GSTO_NOS | ONLINE | RESERVED1 | RESERVED2 |
    ------------------------------------------------------------------------------
    1 | 1048578 | 0 | PART1| '1970-01-01 00:00:00'| 202 | T | <NULL>| <NULL>|
  • 示例2
    分区管理,删除固定分区报错。

    sql
    -- 创建包含固定分区的自动扩展分区表
    CREATE TABLE test(c1 INTEGER, c2 DATETIME, c3 VARCHAR) PARTITION BY RANGE(c2) INTERVAL 1 DAY PARTITIONS(
          p1 VALUES LESS THAN('2000-01-01 00:00:00'),
          p2 VALUES LESS THAN('2023-09-30 00:00:00'),
          p3 VALUES LESS THAN('2023-10-01 00:00:00')
        );
    
    -- 查看表分区信息    
    SELECT * from SYS_PARTIS;
    
    DB_ID | TABLE_ID | PARTI_NO | PARTI_NAME | PARTI_VAL | GSTO_NOS | ONLINE | RESERVED1 | RESERVED2 | 
    ------------------------------------------------------------------------------
    1 | 1048585 | 0 | P1| '2000-01-01 00:00:00'| 201 | T | <NULL>| <NULL>|
    1 | 1048585 | 1 | P2| '2023-09-30 00:00:00'| 205 | T | <NULL>| <NULL>|
    1 | 1048585 | 2 | P3| '2023-10-01 00:00:00'| 206 | T | <NULL>| <NULL>|
    
    -- 删除自动扩展分区表固定分区返回错误
    ALTER TABLE test DROP PARTITION p1;
    Error: [E21093] 不允许删除自动扩展分区表的固定分区
    
    -- 删除除固定分区以外的其他分区
    ALTER TABLE test DROP PARTITION p2;
    ALTER TABLE test DROP PARTITION p3;
    
    -- 删除p1、p2分区后查看表分区信息
    SELECT * FROM SYS_PARTIS;
    
    DB_ID | TABLE_ID | PARTI_NO | PARTI_NAME | PARTI_VAL | GSTO_NOS | ONLINE | RESERVED1 | RESERVED2 | 
    ------------------------------------------------------------------------------
    1 | 1048586 | 0 | P1| '2000-01-01 00:00:00'| 201 | T | <NULL>| <NULL>|