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(); /* 間隔の種類と値を指定せずに、間隔範囲分割テーブルを範囲分割テーブルに切り替えます。 */