数据仓库服务 GAUSSDB(DWS)-分区自动管理优秀实践:分区自动管理

时间:2024-07-01 10:52:46

分区自动管理

分区管理功能是和表级参数period、ttl绑定的,只要成功设置了表级参数period,即开启了自动创建新分区功能;成功设置了表级参数ttl,即开启了自动删除过期分区功能。第一次自动创建分区或删除分区的时间为设置period或ttl后30秒。

​有如下两种开启分区管理功能的方式:

  • 建表时指定period、ttl。

    该方式适用于新建分区管理表时使用。新建分区管理表有两种语法:一种是建表时指定分区,另一种是建表时不指定分区。

    ​建分区管理表时如果指定分区,则语法规则和建普通分区表相同,唯一的区别就是会指定表级参数period、ttl。

    示例:创建分区管理表CPU1,指定分区。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    CREATE TABLE CPU1(
        id integer,
        IP text,
        time timestamp
    ) with (TTL='7 days',PERIOD='1 day')
    partition by range(time)
    (
        PARTITION P1 VALUES LESS THAN('2023-02-13 16:32:45'),
        PARTITION P2 VALUES LESS THAN('2023-02-15 16:48:12')
    );
    

    建分区管理表时可以只指定分区键不指定分区,此时将创建两个默认分区,这两个默认分区的分区时间范围均为period。其中,第一个默认分区的边界时间是大于当前时间的第一个整时/整天/整周/整月/整年的时间,具体选择哪种整点时间取决于period的最大单位;第二个默认分区的边界时间是第一个分区边界时间加period。假设当前时间是2023-02-17 16:32:45,各种情况的第一个默认分区的分区边界选择如下表:

    表2 period参数说明

    period

    period最大单位

    第一个默认分区的分区边界

    1hour

    Hour

    2023-02-17 17:00:00

    1day

    Day

    2023-02-18 00:00:00

    1month

    Month

    2023-03-01 00:00:00

    13months

    Year

    2024-01-01 00:00:00

    创建分区管理表CPU2,不指定分区:

    1
    2
    3
    4
    5
    6
    CREATE TABLE CPU2(
        id integer,
        IP text,
        time timestamp
    ) with (TTL='7 days',PERIOD='1 day')
    partition by range(time);
    
  • 使用ALTER TABLE RESET的方式设置period、ttl。

    该方式适用于给一张满足分区管理约束的普通分区表增加分区管理功能。

    • 创建普通分区表CPU3:
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      CREATE TABLE CPU3(
          id integer,
          IP text,
          time timestamp
      ) 
      partition by range(time)
      (
          PARTITION P1 VALUES LESS THAN('2023-02-14 16:32:45'),
          PARTITION P2 VALUES LESS THAN('2023-02-15 16:56:12')
      );
      
    • 同时开启自动创建和自动删除分区功能:
      1
      ALTER TABLE CPU3 SET (PERIOD='1 day',TTL='7 days');
      
    • 只开启自动创建分区功能:
      1
      ALTER TABLE CPU3 SET (PERIOD='1 day');
      
    • 只开启自动删除分区功能,如果没有提前开启自动创建分区功能,则开启失败:
      1
      ALTER TABLE CPU3 SET (TTL='7 days');
      
    • 通过修改period和ttl修改分区管理功能:
      1
      ALTER TABLE CPU3 SET (TTL='10 days',PERIOD='2 days');
      
  • 关闭分区管理功能。

    使用ALTER TABLE RESET语句可以删除表级参数period、ttl,即可关闭相应的分区管理功能。

    • 不能在存在ttl的情况下,单独删除period。
    • 时序表不支持ALTER TABLE RESET。​
    • 同时关闭自动创建和自动删除分区功能:
      1
      ALTER TABLE CPU1 RESET (PERIOD,TTL);
      
    • 只关闭自动删除分区功能:
      1
      ALTER TABLE CPU3 RESET (TTL);
      
    • 只关闭自动创建分区功能,如果该表有ttl参数,则关闭失败:
      1
      ALTER TABLE CPU3 RESET (PERIOD);
      
support.huaweicloud.com/qs-dws/dws_01_0105.html