すべてのプロダクト
Search
ドキュメントセンター

PolarDB:参加を追加

最終更新日:Jul 25, 2024

このトピックでは、既存のパーティションテーブルにパーティションとサブパーティションを追加する方法について説明します。

構文

ALTER TABLE... ADD PARTITIONステートメントを使用して、既存のパーティションテーブルにパーティションとサブパーティションを追加できます。

ALTER TABLE table_name ADD PARTITION partition_definition;

partition_definition:

{list_partition | range_partition | hash_partition | key_partition}

list_partition:

PARTITION [partition_name]
VALUES IN (value[, value]...)
[TABLESPACE tablespace_name] 
(subpartition, ...)

range_partition:

PARTITION partition_name
VALUES LESS THAN (value[, value]...)
[TABLESPACE tablespace_name]
[(subpartition, ...)]

hash_partitionまたはkey_partition:

PARTITION partition_name
[TABLESPACE tablespace_name]
(subpartition, ...)

subpartition:

{list_subpartition | range_subpartition | hash_partition | key_partition}

list_subpartition:

SUBPARTITION [subpartition_name]
VALUES IN (value[, value]...)
[TABLESPACE tablespace_name]

range_subpartition:

SUBPARTITION [subpartition_name ]
VALUES LESS THAN (value[, value]...)
[TABLESPACE tablespace_name]

hash_partitionまたはkey_subpartition:

SUBPARTITION [subpartition_name ]
[TABLESPACE tablespace_name]

パラメーター

パラメーター

説明

table_name

パーティション分割されたテーブルの名前。スキーマ修飾できます。

partition_name

パーティションの名前。 パーティション名は、すべてのパーティションおよびサブパーティション間で一意である必要があり、オブジェクト識別子の命名規則に従う必要があります。

subpartition_name

サブパーティションの名前。 サブパーティション名は、すべてのパーティションおよびサブパーティション間で一意である必要があり、オブジェクト識別子の命名規則に従う必要があります。

(value[, value]...)

valueは、引用符で囲まれたリテラル値、またはテーブルエントリを異なるパーティションに分割するリテラル値のコンマ区切りリストを指定します。 各パーティション分割ルールは、少なくとも1つの値を指定する必要があります。 ルールで指定される値の数は制限されません。 valueには、nulldefault (list partitioning) 、またはmaxvalue (range partitioning) を指定できます。

tablespace_name

パーティションまたはサブパーティションが存在するテーブルスペースの名前。

使用上の注意

ALTER TABLE... ADD PARTITIONステートメントは、既存のパーティションテーブルにパーティションとサブパーティションを追加するために使用します。 パーティションテーブルがサブパーティションになっていることを確認します。 新しいパーティションとサブパーティションは、パーティションテーブルの既存のパーティションとサブパーティションと同じ型である必要があります。 新しいパーティションのパーティション分割ルールは、既存のパーティションを定義するパーティション分割ルールで指定された同じ列を参照する必要があります。

テーブルスペース (新しいサブパーティションが属するテーブルスペースを含む) を指定しない場合、サブパーティションはデフォルトのテーブルスペースに作成されます。

パーティションテーブルがインデックス付けされている場合、インデックスは新しいサブパーティションに作成されます。

説明

範囲パーティションを定義するときは、パーティションキー値の昇順でパーティションを並べます。 RANGEパーティションテーブルの既存のパーティションの前に新しいパーティションを追加することはできません。

  • sales_range_rangeという名前のパーティションテーブルを作成し、パーティションとサブパーティションをテーブルに追加します。

    1. rangeでパーティション分割され、さらにRANGEでサブパーティション分割されるsales_range_RANGEという名前のテーブルを作成します。

      CREATE TABLE sales_range_range
      (
        dept_no     INT,
        part_no     INT,
        country     varchar(20),
        date        DATE,
        amount      INT
      )
      PARTITION BY RANGE(dept_no)
      SUBPARTITION BY RANGE(part_no)
      (
        PARTITION p0 VALUES LESS THAN (1000) (
          SUBPARTITION s0 VALUES LESS THAN(100),
          SUBPARTITION s1 VALUES LESS THAN(200),
          SUBPARTITION s2 VALUES LESS THAN(300),
          SUBPARTITION s3 VALUES LESS THAN(MAXVALUE)
        )
      );
    2. ALTER TABLE... ADD PARTITIONステートメントを使用して、パーティションとサブパーティションをsales_range_rangeパーティションテーブルに追加します。

      ALTER TABLE sales_range_range ADD PARTITION (
          PARTITION p_2015 VALUES less than (2016)
          (
          SUBPARTITION q1_2015 VALUES LESS THAN(4),
          SUBPARTITION q2_2015 VALUES LESS THAN(7),
          SUBPARTITION q3_2015 VALUES LESS THAN(10),
          SUBPARTITION q4_2015 VALUES LESS THAN(13)
        )
      );
  • sales_list_rangeという名前のパーティションテーブルを作成し、パーティションとサブパーティションをテーブルに追加します。

    1. LISTでパーティション分割され、さらにrangeでサブパーティション分割されたsales_list_RANGEという名前のパーティションテーブルを作成します。

      CREATE TABLE sales_list_range
      (
        dept_no     INT,
        part_no     INT,
        country     varchar(20),
        date        DATE,
        amount      INT
      )
      PARTITION BY LIST (dept_no)
      SUBPARTITION BY RANGE(amount)
      (
        PARTITION p0 VALUES in (1, 2)(
          SUBPARTITION s0 VALUES LESS THAN(1000),
          SUBPARTITION s1 VALUES LESS THAN(2000),
          SUBPARTITION s2 VALUES LESS THAN(3000),
          SUBPARTITION s3 VALUES LESS THAN(MAXVALUE)
        )
      );
    2. ALTER TABLE... ADD PARTITIONステートメントを使用して、パーティションとサブパーティションをsales_list_rangeパーティションテーブルに追加します。

      ALTER TABLE sales_list_range ADD PARTITION (
         PARTITION p3 VALUES in (7, 8)(
          SUBPARTITION q1_2015 VALUES LESS THAN(4),
          SUBPARTITION q2_2015 VALUES LESS THAN(7),
          SUBPARTITION q3_2015 VALUES LESS THAN(10),
          SUBPARTITION q4_2015 VALUES LESS THAN(13)
        )
      );
  • sales_hash_hashという名前のパーティションテーブルを作成し、パーティションとサブパーティションをテーブルに追加します。

    1. hashでパーティション分割され、さらにHASHでパーティション分割されるsales_hash_hashという名前のパーティションテーブルを作成します。

      CREATE TABLE sales_hash_hash
      (
        dept_no     INT,
        part_no     INT,
        country     varchar(20),
        date        DATE,
        amount      INT
      )
         PARTITION BY HASH(dept_no) PARTITIONS 9
         SUBPARTITION BY HASH(part_no) SUBPARTITIONS 3
      ;
    2. ALTER TABLE... ADD PARTITIONステートメントを使用して、パーティションとサブパーティションをsales_hash_hashパーティション分割テーブルに追加します。

      ALTER TABLE sales_hash_hash ADD PARTITION (
         PARTITION m3(
          SUBPARTITION d6,
          SUBPARTITION d7,
          SUBPARTITION d8
        )
      );
  • sales_key_keyという名前のパーティションテーブルを作成し、パーティションとサブパーティションをテーブルに追加します。

    1. keyでパーティション分割され、さらにKEYでパーティション分割されるsales_key_keyという名前のパーティションテーブルを作成します。

      CREATE TABLE sales_key_key
      (
        dept_no     varchar(20),
        part_no     varchar(20),
        country     varchar(20),
        date        DATE,
        amount      INT
      )
         PARTITION BY KEY(dept_no) PARTITIONS 3
         SUBPARTITION BY KEY(part_no) SUBPARTITIONS 2;
    2. ALTER TABLE... ADD PARTITIONステートメントを使用して、パーティションとサブパーティションをsales_key_keyパーティション分割テーブルに追加します。

      ALTER TABLE sales_key_key ADD PARTITION (
         PARTITION m3(
          SUBPARTITION d6,
          SUBPARTITION d7
        )
      );