[LightDB兼容增强]支持 Oracle list default 分区

背景:

  基于列离散值的分区通常非常有用,比如,若订单需要按城市进行分区存储,我们则可以将城市作为表的一列,然后基于此列的值来做分区,以往的版本中,我们已经有此功能支持,但是通常情况下,我们可能并不想将所有的数据按所有的城市进行分区存储,这也没有必要。有没有一种可能性,我们指定其中一些我们感兴趣的某些城市数据存储在对应分区,其它所有城市数据存储在某个默认分区呢,这就如以下代码逻辑:

switch(partition)
{
    case CITY_BEIJING:
        {}
        break;
    case CITY_SHANGHAI:
        {}
        break;
    case CITY_HANGZHOU:
        {}
        break;
    default:
        {}
        break;
}

  

为了解决此问题,LightDB自23.3开始,我们增加了列表分区的默认分区支持。

支持版本:自LightDB 23.2

案例:

假如我们有一个销售系统需要将销售数据存储到表sales中,其中北京,上海,杭州的的数据分别存储在对应的分区,其它城市都存储在默认分区。

代码:

create table sales ( transaction_id int, city varchar(64) )
partition by list(city)
(
    partition sales_bj values('beijing'),
    partition sales_sh values('shanghai'),
    partition sales_hz values('hangzhou'),
    partition sales_othercity values(default)    
);

 

insert into sales(transaction_id, city) values(1,'beijing'); 
insert into sales(transaction_id, city) values(2,'shanghai'); 
insert into sales(transaction_id, city) values(3,'hangzhou'); 
insert into sales(transaction_id, city) values(4,'suzhou'); 

select * from sales;

  

通过以上分区表设计,北京,上海,杭州的数据将直接存储在对应的分区中,其它城市的数据都将存储在默认分区。

除了在创建表的时候,我们可以指定默认分区,我们也可以通过修改表的方式额外添加默认分区,删除默认分区,与操作一个普通分区并无区别。

alter table sales drop partition sales_othercity;   
alter table sales add partition sales_othercity values(default);

  

注意:

1,当一个表中如果已经有一个默认分区,所有新分区的添加都将被禁止。

2,更新一个分区表中的行,如果分区键包含更新列,此行更新后,存储的位置将从源分区表自动移动到新分区表。

3,当list分区无default分区的时候,插入找不到对应分区表的数据时,将会出错。

 

posted on 2023-07-27 20:36  aodb  阅读(28)  评论(0编辑  收藏  举报