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

PolarDB:間隔範囲パーティション分割テーブルの切り替え

最終更新日:Jun 03, 2024

ALTER TABLE文を実行してパーティション属性を変更し、インターバルレンジパーティションテーブルと共通テーブルまたはレンジパーティションテーブルを切り替えることができます。

前提条件

クラスターのバージョンはPolarDB for MySQL 8.0である必要があり、クラスターのリビジョンバージョンは8.0.2.2.0以降である必要があります。 クラスターのバージョンを表示する方法については、「エンジンバージョンの照会」をご参照ください。

ルールの切り替え

次の切り替えルールに注意してください。
  • 共通テーブルは、間隔範囲分割テーブルに切り替えることができます。 ただし、インターバル範囲分割テーブルを共通テーブルに切り替えることはできません。 ALTER TABLE table_name partition_optionsステートメントを実行して、共通テーブルを間隔範囲のパーティションテーブルに切り替えることができます。
  • PolarDB for MySQL 8.0.2.2.0以降で、ALTER table table_name partition_optionsステートメントを実行します。 PolarDB for MySQL 8.0.2.2.1以降で、ALTER TABLE table_name SET { INTERVAL(type, expr) | INTERVAL(expr) } ステートメントを実行します。

構文

  • 構文1
    ALTER TABLE table_name partition_options;
    partition_optionsは次のとおりです。
    
        {RANGE{(expr) | COLUMNS(column_list)} }
        {INTERVAL(type, expr) | INTERVAL(expr) }
        [(partition_definition [, partition_definition] ...)] 
    partition_definition is:
    partition partition_name
            [{expr | MAXVALUE} より少ない値]
            [[ストレージ] エンジン [=] engine_name]
            [COMMENT [=] 'string']
            [データディレクトリ [=] 'data_dir']
            [インデックスディレクトリ [=] 'index_dir']
            [MAX_ROWS [=] max_number_of_rows]
            [MIN_ROWS [=] min_number_of_rows]
            [TABLESPACE [=] tablespace_name] 
  • 構文2
    ALTER TABLE table_name SET { INTERVAL(type, expr) | INTERVAL(expr) };

パラメーター

パラメーター説明
table_nameテーブルの名前。
範囲 (expr)パーティションの式。 INTタイプである必要があります。 string型はサポートされていません。
column_listパーティションのリスト。 LIST COLUMNS() で使用されます。 式はサポートされていません。
INTERVAL (タイプ)間隔のタイプ。 8つの時間タイプがサポートされています: YEAR、QUARTER、MONTH、WEEK、DAY、HOUR、MINUTE、およびSECOND。 ここで型を指定しない場合、デフォルトで数値型が選択されます。
インターバル (expr)間隔の値。 typeがSECONDに設定されている場合、値は60未満にすることはできません。
MAXVALUEパーティションの最大値。
engine_nameストレージエンジンの名前。

共通テーブルを間隔範囲パーティションテーブルに切り替える

既存のテーブルを間隔範囲パーティションテーブルに切り替えることができます。 適切なパーティションキーを選択し、テーブル内の既存のデータのパーティションを定義します。 切り替えが完了した後、新たに挿入されたデータは、パーティションの自動作成をトリガできる。

次の例では、注文テーブルを間隔範囲分割テーブルに切り替えます。
テーブル注文を作成する (
  orderkey BIGINT NOT NULL、
  custkey BIGINT NOT NULL、
  注文日はNULLではない
);

ALTERテーブル注文
RANGE COLUMNSによるパーティー (注文) インターバル (月、1) (
  PARTITION p0はより少ない値 ('2021-10-01 ')
); 

レンジパーティションテーブルをインターバルレンジパーティションテーブルに切り替える

既存のレンジパーティションテーブルをインターバルレンジパーティションテーブルに切り替えることができます。 テーブル内の既存のデータの間隔範囲パーティションを定義します。 切り替えが完了した後、新たに挿入されたデータは、パーティションの自動作成をトリガできる。 次のいずれかの方法を使用できます。
  • 方法1: ALTER TABLE table_name partition_optionsステートメントを実行する
    次の例では、注文パーティションテーブルを間隔範囲パーティションテーブルに切り替えます。
    テーブル注文を作成する (
      orderkey BIGINT NOT NULL、
      custkey BIGINT NOT NULL、
      注文日はNULLではない
    )
    範囲 (orderkey) による区分 (
      PARTITION p0の値がより少ない (10000000)
    );
    
    ALTERテーブル注文
    RANGE COLUMNSによるパーティー (注文) インターバル (月、1) (
      PARTITION p0はより少ない値 ('2021-10-01 ')
    ); 
  • 方法2: ALTER TABLE table_name SET { INTERVAL(type, expr) | INTERVAL(expr) } ステートメントを実行する
    次の例では、注文パーティションテーブルを間隔範囲パーティションテーブルに切り替えます。
    テーブル注文を作成する (
      orderkey BIGINT NOT NULL、
      custkey BIGINT NOT NULL、
      注文日はNULLではない
    )
    RANGE COLUMNS(orderdate) によるパーティー ()
      PARTITION p0はより少ない値 ('2021-10-01 ')
    );
    
    ALTER TABLE注文セットインターバル (月、1); 

間隔範囲パーティションテーブルを範囲パーティションテーブルに切り替える

既存の間隔範囲パーティションテーブルを範囲パーティションテーブルに切り替えることができます。 次のいずれかの方法を使用できます。
  • 方法1: ALTER TABLE table_name partition_optionsステートメントを実行する
    次の例では、注文パーティションテーブルをレンジパーティションテーブルに切り替えます。
    テーブル注文を作成する (
      orderkey BIGINT NOT NULL、
      custkey BIGINT NOT NULL、
      注文日はNULLではない
    )
    レンジによる参加 (orderkey) インターバル (100000) (
      PARTITION p0の値がより少ない (10000000)
    );
    
    ALTERテーブル注文
    RANGE COLUMNS(orderdate) によるパーティー ()
      PARTITION p0はより少ない値 ('2021-10-01 ')
    ); 
  • 方法2: ALTER TABLE table_name SET { INTERVAL(type, expr) | INTERVAL(expr) } ステートメントを実行する
    次の例では、注文パーティションテーブルをレンジパーティションテーブルに切り替えます。
    テーブル注文を作成する (
      orderkey BIGINT NOT NULL、
      custkey BIGINT NOT NULL、
      注文日はNULLではない
    )
    レンジによる参加 (orderkey) インターバル (100000) (
      PARTITION p0の値がより少ない (10000000)
    );
    
    ALTER TABLE orders SET INTERVAL(); /* 間隔の種類と値を指定せずに、間隔範囲分割テーブルを範囲分割テーブルに切り替えます。 */