KingbaseES interval 分区表介绍

KingbaseES从V008R006C005B0041版本开始支持Oracle的Interval分区表功能。
Interval分区表是一种特殊的范围分区表。当执行INSERT或者UPDATE时,若数据超过所有现有范围分区时由数据库根据定义的间隔参数自动创建新的分区。
Interval分区只能指定一个分区键列,并且数据类型必须为NUMBER或者DATE类型。

语法

CREATE TABLE table_name
(
  ...
)
PARTITION BY RANGE(column1)
INTERVAL expr [STORE IN (tablespace1,[tablespace2,...])]
(
  PARTITION partition_name1 VALUES LESS THAN(literal | MAXVALUE) [TABLESPACE tablespace1]
);

例子

时间类型分区
CREATE TABLE interval_date
(
  employee_id         NUMBER,
  employee_name       VARCHAR2(20),
  birthday            DATE    
)
PARTITION BY RANGE(birthday)
INTERVAL ('1 month'::interval)
(
  PARTITION partition202201 VALUES LESS THAN(to_date('2022-02-01:00:00:00','yyyy-mm-dd hh24:mi:ss'))
);

数字类型分区
CREATE TABLE interval_t2
(
  employee_id         NUMBER,
  employee_name       VARCHAR2(20),
  birthday            DATE    
)
PARTITION BY RANGE(employee_id)
INTERVAL (10)
(
  PARTITION partition10 VALUES LESS THAN(10)
);

验证分区是否能自动扩展

查看表结构:
test=# \d+ interval_date
                                   分区表 "public.interval_date"
     栏位      |            类型            | 校对规则 | 可空的 | 预设 |   存储   | 统计目标 | 描述 
---------------+----------------------------+----------+--------+------+----------+----------+------
 employee_id   | numeric                    |          |        |      | main     |          | 
 employee_name | character varying(20 char) |          |        |      | extended |          | 
 birthday      | date                       |          |        |      | plain    |          | 
分区键值: RANGE (birthday)
Range interval: INTERVAL ('1 mon'::interval)
分区: interval_date_partition202201 FOR VALUES FROM (MINVALUE) TO ('2022-02-01 00:00:00')

插入一条不在分区区间的数据

test=# insert into interval_date values (2,'bill',to_date('2022-02-03:00:00:00','yyyy-mm-dd hh24:mi:ss'));
INSERT 0 1
test=# \d+ interval_date                                                                                  
                                   分区表 "public.interval_date"
     栏位      |            类型            | 校对规则 | 可空的 | 预设 |   存储   | 统计目标 | 描述 
---------------+----------------------------+----------+--------+------+----------+----------+------
 employee_id   | numeric                    |          |        |      | main     |          | 
 employee_name | character varying(20 char) |          |        |      | extended |          | 
 birthday      | date                       |          |        |      | plain    |          | 
分区键值: RANGE (birthday)
Range interval: INTERVAL ('1 mon'::interval)
分区: interval_date_p1 FOR VALUES FROM ('2022-02-01 00:00:00') TO ('2022-03-01 00:00:00'),
      interval_date_partition202201 FOR VALUES FROM (MINVALUE) TO ('2022-02-01 00:00:00')

可以看到数据库已自动扩展了2月份的分区interval_date_p1
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值