暂无图片
暂无图片
5
暂无图片
暂无图片
暂无图片

OceanBase分布式存储管理Oracle模式创建一级分区表

2023-04-15
975

您可以根据业务需求,创建相应类型的一级分区表或二级分区表。

OceanBase 数据库中有两种表,分区表和非分区表。分区表是将一个表分解成多个更小的、更容易管理的部分。

支持的分区类型

OceanBase 数据库 Oracle 模式的一级分区支持的分区类型如下:Range 分区、List 分区及 Hash 分区。

OceanBase 数据库 Oracle 模式的二级分区为任意两种分区类型的组合,具体支持情况如下:

二级分区类型创建模板化二级分区表创建非模板化二级分区表
Range + Range支持支持
Range + List支持支持
Range + Hash支持支持
List + Range支持支持
List + List支持支持
List + Hash支持支持
Hash + Range支持支持
Hash + List支持支持
Hash + Hash支持支持

创建 Range 类型的一级分区表

语法

CREATE TABLE table_name (column_name column_type[, column_name column_type])
  PARTITION BY { RANGE (column_name) }
    (PARTITION partition_name VALUES LESS THAN(expr)
     [, PARTITION partition_name VALUES LESS THAN (expr )...]
     [, PARTITION partition_name VALUES LESS THAN (MAXVALUE)]
     );

在创建 Range 分区时,需要遵循以下规则:

  • 每个分区都有一个 VALUES LESS THAN 子句,它为分区指定一个非包含的上限值。分区键的任何值等于或大于这个值时将被映射到下一个分区中。

  • Range 分区的分区键不能是表达式。

  • 除第一个分区外,所有分区都隐含一个下限值,即上一个分区的上限值。

  • 仅允许最后一个分区的上限定义为 MAXVALUE,这个值没有具体的数值,并且比其他所有分区的上限都要大,也包含空值。如果最后一个 Range 分区指定了 MAXVALUE ,则不能新增分区。

参数解释

参数描述
table_name指定表名。
column_name指定列名称。
column_type指定列的数据类型。
partition_name指定一级分区名称。

示例

创建一个 Range 分区表 tbl1_log_r

obclient> CREATE TABLE tbl1_log_r(log_id INT,log_date DATE NOT NULL DEFAULT SYSDATE)
       PARTITION BY RANGE(log_date) 
        (PARTITION M202001 VALUES LESS THAN(TO_DATE('2020/02/01','YYYY/MM/DD'))
         , PARTITION M202002 VALUES LESS THAN(TO_DATE('2020/03/01','YYYY/MM/DD'))
         , PARTITION M202003 VALUES LESS THAN(TO_DATE('2020/04/01','YYYY/MM/DD'))
         , PARTITION M202004 VALUES LESS THAN(TO_DATE('2020/05/01','YYYY/MM/DD'))
         , PARTITION M202005 VALUES LESS THAN(TO_DATE('2020/06/01','YYYY/MM/DD'))
         , PARTITION M202006 VALUES LESS THAN(TO_DATE('2020/07/01','YYYY/MM/DD'))
         , PARTITION M202007 VALUES LESS THAN(TO_DATE('2020/08/01','YYYY/MM/DD'))
         , PARTITION M202008 VALUES LESS THAN(TO_DATE('2020/09/01','YYYY/MM/DD'))
         , PARTITION M202009 VALUES LESS THAN(TO_DATE('2020/10/01','YYYY/MM/DD'))
         , PARTITION M202010 VALUES LESS THAN(TO_DATE('2020/11/01','YYYY/MM/DD'))
         , PARTITION M202011 VALUES LESS THAN(TO_DATE('2020/12/01','YYYY/MM/DD'))
         , PARTITION M202012 VALUES LESS THAN(TO_DATE('2021/01/01','YYYY/MM/DD'))
         , PARTITION MMAX VALUES LESS THAN (MAXVALUE)
         );
Query OK, 0 rows affected

创建 List 类型的一级分区表

语法

CREATE TABLE table_name (column_name column_type[,column_name column_type])
  PARTITION BY { LIST ( expr(column_name) | column_name )}
    (PARTITION partition_name VALUES ( v01 [, v0N])
     [,PARTITION partition_name VALUES ( vN1 [, vNN])]
     [,PARTITION partition_name VALUES (DEFAULT)]
    );

说明

  • 当使用 List 分区时,分区表达式只能引用一列,不能有多列(即列向量)。

  • 如果最后一个 List 分区指定了 DEFAULT,则不能新增分区。

参数解释

参数描述
table_name指定表名。
column_name指定列名称。
column_type指定列的数据类型。
partition_name指定分区名称。
DEFAULT仅允许最后一个分区指定这个值,这个值没有具体的数值,并且比其他所有分区的上限都要大,也包含空值。

示例

创建一个 List 分区表 tbl1_log_l

obclient> CREATE TABLE tbl1_log_l(log_id INT,log_value VARCHAR2(20))
       PARTITION BY LIST(log_value) 
        (PARTITION P01 VALUES ('A'),
         PARTITION P02 VALUES ( 'B' ),
         PARTITION P03 VALUES ( 'C' )
        );
Query OK, 0 rows affected

创建 Hash 类型的一级分区表

语法

CREATE TABLE table_name (column_name column_type[,column_name column_type])
PARTITION BY HASH(expr) PARTITIONS partition_count;

参数解释

参数描述
table_name指定表名。
column_name指定列名。
column_type指定列的数据类型。
expr指定 Hash 分区表达式。
partition_count指定一级分区个数。

说明

对于 Hash 分区,创建时如果没有指定分区的名字,分区的命名由系统根据命名规则完成。对于一级分区表,则每个分区分别命名为 p0、p1、...、pn。

示例

创建一个 Hash 分区表 tbl1_h。

obclient> CREATE TABLE tbl1_h(col1 INT,col2 VARCHAR(50))
       PARTITION BY HASH(col1) PARTITIONS 60;
Query OK, 0 rows affected
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论