PolarDB PostgreSQL版(兼容Oracle)提供了一种简洁的语法用于创建指定分区数量的HASH分区表。

创建HASH分区

语法:

CREATE TABLE ... PARTITION BY HASH (part_params) PARTITIONS number ;

参数说明如下。

参数说明
part_params分区字段。
numberHASH分区数量。

示例如下:

CREATE TABLE part_hash (deptno NUMBER, deptname VARCHAR(32))
     PARTITION BY HASH(deptno) PARTITIONS 4;

创建HASH子分区

语法:

CREATE TABLE ... PARTITION BY part_strategy ( part_params )  SUBPARTITION BY HASH ( part_params)  SUBPARTITIONS number ( table_partitions_list );

参数说明如下。

参数说明
part_strategy分区表类型,支持如下:
  • RANGE
  • LIST
  • HASH
part_params分区字段。
table_partitions_list分区定义列表。
numberHASH子分区数量。
  • 分区类型为RANGE,子分区类型为HASH,示例如下:
     CREATE TABLE part_test
      ( prod_id       NUMBER(6), 
      cust_id       NUMBER, 
      time_id       DATE, 
      channel_id    CHAR(1), 
      promo_id      NUMBER(6), 
      quantity_sold NUMBER(3), 
      amount_sold   NUMBER(10,2)
      )
     PARTITION BY RANGE (time_id) SUBPARTITION BY HASH (cust_id)
      SUBPARTITIONS 4
     ( PARTITION sales_q1_2006 VALUES LESS THAN (TO_DATE('01-APR-2006','dd-MON-yyyy'))(
            SUBPARTITION q1_europe,
            SUBPARTITION q1_asia ,
            SUBPARTITION q1_americas
           ), 
     PARTITION sales_q2_2006 VALUES LESS THAN (TO_DATE('01-JUL-2006','dd-MON-yyyy')), 
     PARTITION sales_q3_2006 VALUES LESS THAN (TO_DATE('01-OCT-2006','dd-MON-yyyy')), 
     PARTITION sales_q4_2006 VALUES LESS THAN (TO_DATE('01-JAN-2007','dd-MON-yyyy'))
     );
  • 分区和子分区类型均为HASH,示例如下:
    CREATE TABLE part_test
      ( prod_id       NUMBER(6), 
      cust_id       NUMBER, 
      time_id       DATE, 
      channel_id    CHAR(1), 
      promo_id      NUMBER(6), 
      quantity_sold NUMBER(3), 
      amount_sold   NUMBER(10,2)
      )
    PARTITION BY HASH (prod_id) SUBPARTITION BY HASH (cust_id) 
      PARTITIONS 4 SUBPARTITIONS 4;

相关文档

CREATE TABLE...PARTITION BY