全部產品
Search
文件中心

PolarDB:子分區模板

更新時間:Jul 06, 2024

子分區模板用於快速定義子分區,簡化子分區的規範。您只需在子分區模板中定義一次子分區描述符,然後將該子分區模板應用於表中的每個分區,從而快速批量地為表中的分區定義子分區描述符。

注意事項

  • 如果分區未指定子分區描述符,系統將預設使用子分區模板來定義子分區。
  • 如果分區已指定子分區描述符,系統將預設使用該描述符定義子分區。
  • 如果分區未指定子分區描述符,也沒有提供子分區模板,系統將預設將建立一個預設子分區。
  • 如果在子分區模板中指定了子分區名稱,則對於使用該模板建立的子分區,名稱為“分區名稱_子分區模板名稱”。例如:分區的名字為parta,子分區模板的名字為subpartb,拼接後產生的子分區名為parta_subpartb。

文法

  • 建立子分區模板1(通用文法)
    CREATE TABLE  table_definition PARTITION BY hash/range/list (column[, column ]...)
    SUBPARTITION BY hash/range/list (column[, column ]...)
    SUBPARTITION TEMPLATE (subpartition[, subpartition], ...)
    (table_partition[, table_partition]...);
  • 建立子分區模板2(僅適用於子分區是HASH分區類型的情況)
    CREATE TABLE  table_definition PARTITION BY hash/range/list (column[, column ]...)
    SUBPARTITION BY hash(column[, column ]...)
    SUBPARTITION TEMPLATE num
    (table_partition[, table_partition]...);
  • 建立子分區模板3(僅適用於分區和子分區都是HASH分區類型的情況)
    CREATE TABLE  table_definition PARTITION BY hash (column[, column ]...)
    SUBPARTITION BY hash(column[, column ]...)  PARTITIONS num SUBPARTITIONS num;
  • 修改子分區模板1(通用文法)
    ALTER TABLE  table_definition SUBPARTITION TEMPLATE (subpartition[, subpartition], ...)
  • 修改子分區模板2 (僅適用於子分區是HASH分區類型的情況)
    ALTER TABLE  table_definition SUBPARTITION TEMPLATE number
  • 刪除子分區模板
    ALTER TABLE  table_definition SUBPARTITION TEMPLATE ()

樣本

  • 建立子分區模板1(通用文法)
    CREATE TABLE shipments
    ( order_id      NUMBER NOT NULL,
      order_date    DATE NOT NULL,
      delivery_date DATE NOT NULL,
      customer_id   NUMBER NOT NULL,
      sales_amount  NUMBER NOT NULL
    )
    PARTITION BY RANGE (order_date) SUBPARTITION BY RANGE(delivery_date)
         SUBPARTITION TEMPLATE
       (SUBPARTITION e VALUES LESS THAN (TO_DATE('15-AUG-2006','dd-MON-yyyy')),
        SUBPARTITION a VALUES LESS THAN (TO_DATE('01-SEP-2006','dd-MON-yyyy')),
        SUBPARTITION l VALUES LESS THAN (MAXVALUE) )
       ( PARTITION p_2006_jul VALUES LESS THAN (TO_DATE('01-AUG-2006','dd-MON-yyyy')),
      PARTITION p_2006_aug VALUES LESS THAN (TO_DATE('01-SEP-2006','dd-MON-yyyy')),
      PARTITION p_2006_sep VALUES LESS THAN (TO_DATE('01-OCT-2006','dd-MON-yyyy')),
      PARTITION p_2006_oct VALUES LESS THAN (TO_DATE('01-NOV-2006','dd-MON-yyyy')),
      PARTITION p_2006_nov VALUES LESS THAN (TO_DATE('01-DEC-2006','dd-MON-yyyy')),
      PARTITION p_2006_dec VALUES LESS THAN (TO_DATE('01-JAN-2007','dd-MON-yyyy'))
    );
  • 建立子分區模板2(僅適用於子分區是HASH分區類型的情況)
    CREATE TABLE emp_sub_template (deptno NUMBER, empname VARCHAR(32), grade NUMBER)
         PARTITION BY RANGE(deptno) SUBPARTITION BY HASH(empname)
         SUBPARTITION TEMPLATE  4
        (PARTITION p1 VALUES LESS THAN (1000),
         PARTITION p2 VALUES LESS THAN (2000),
         PARTITION p3 VALUES LESS THAN (6000)
        );
  • 建立子分區模板3 (僅適用於分區和子分區都是HASH分區類型的情況)
    CREATE TABLE hash_sub_template (deptno NUMBER, empname VARCHAR(32), grade NUMBER)
         PARTITION BY HASH(deptno) SUBPARTITION BY HASH(empname) PARTITIONS 4 SUBPARTITIONS 3;
  • 修改子分區模板1(通用文法)
    ALTER TABLE  hash_sub_template SET SUBPARTITION TEMPLATE
    (SUBPARTITION a1,
              SUBPARTITION b1,
              SUBPARTITION c1,
              SUBPARTITION d1);
  • 修改子分區模板2 (僅適用於子分區是HASH分區類型的情況)
    ALTER TABLE  hash_sub_template SET SUBPARTITION TEMPLATE 3;