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

PolarDB:パーティションテーブルの変換

最終更新日:Mar 29, 2026

ALTER TABLE を使用して、通常 (非パーティション化)、レンジパーティション化、インターバル・レンジ・パーティション化の 3 つのパーティション戦略間でテーブルを変換します。

前提条件

開始する前に、以下を確認してください。

  • リビジョンバージョンが 8.0.2.2.0 以降の PolarDB for MySQL 8.0 クラスター

リビジョンバージョンを確認するには、「エンジンバージョンのクエリ」をご参照ください。

仕組み

インターバル・レンジ・パーティション表では、トランジションポイントを使用して、明示的に定義されたレンジパーティションと自動的に管理されるインターバルパーティションを分離します。トランジションポイントまでのすべてのデータは、名前付きのレンジパーティションに格納されます。そのポイントを超えるデータは、指定されたインターバルでパーティションの自動作成をトリガーします。手動で ADD PARTITION を実行する必要はありません。

テーブルからインターバル定義を削除すると、既存のすべてのインターバルパーティションは標準のレンジパーティションになります。

切り替えルール

変換サポート状況方法
通常テーブル → インターバル・レンジ・パーティション表はいALTER TABLE ... PARTITION BY
インターバル・レンジ・パーティション表 → 通常テーブルいいえ
レンジパーティションテーブル → インターバル・レンジ・パーティション表はいALTER TABLE ... PARTITION BY (8.0.2.2.0 以降) または SET INTERVAL (8.0.2.2.1 以降)
インターバル・レンジ・パーティション表 → レンジパーティションテーブルはいALTER TABLE ... PARTITION BY (8.0.2.2.0 以降) または SET INTERVAL() (8.0.2.2.1 以降)
インターバル・レンジ・パーティション表に変換した後、データがトランジションポイントを超えて挿入されると、データベースは新しいパーティションを自動的に作成します。インターバル・レンジ・パーティション表にパーティションを明示的に追加することはできません。

構文

構文 1 — 完全なパーティションスキームの再定義:

ALTER TABLE table_name partition_options;

partition_options は次のとおりです:

PARTITION BY
    { RANGE{(expr) | COLUMNS(column_list)} }
    { INTERVAL(type, expr) | INTERVAL(expr) }
    [(partition_definition [, partition_definition] ...)]

partition_definition は次のとおりです:

PARTITION partition_name
        [VALUES LESS THAN {expr | MAXVALUE}]
        [[STORAGE] ENGINE [=] engine_name]
        [COMMENT [=] 'string' ]
        [DATA DIRECTORY [=] 'data_dir']
        [INDEX DIRECTORY [=] 'index_dir']
        [MAX_ROWS [=] max_number_of_rows]
        [MIN_ROWS [=] min_number_of_rows]
        [TABLESPACE [=] tablespace_name]

構文 2 — 既存のレンジパーティションテーブルでインターバルを切り替える (8.0.2.2.1 以降が必要):

ALTER TABLE table_name SET { INTERVAL(type, expr) | INTERVAL(expr) };

インターバルパーティション化を無効にしてレンジパーティションテーブルに戻すには、引数なしで SET INTERVAL() を呼び出します。

パラメーター

パラメーター説明
table_nameテーブルの名前
RANGE(expr)パーティション式。評価結果は INT 型の値である必要があります。文字列型はサポートされていません。
column_listRANGE COLUMNS() の列リスト。式はサポートされていません。
INTERVAL(type)インターバル時間型。サポートされている値: YEARQUARTERMONTHWEEKDAYHOURMINUTESECOND。省略した場合は、数値型が使用されます。
INTERVAL(expr)インターバル値。typeSECOND の場合、値は 60 以上
MAXVALUEパーティションの最大値
engine_nameストレージエンジン名

通常テーブルからインターバル・レンジ・パーティション表への変換

初期レンジパーティションを定義して、トランジションポイントを設定します。その境界を超えて挿入されたデータは、新しい月次 (またはその他のインターバル) パーティションを自動的に作成します。

CREATE TABLE orders(
  orderkey BIGINT NOT NULL,
  custkey  BIGINT NOT NULL,
  orderdate DATE NOT NULL
);

-- インターバル・レンジ・パーティション表に変換します。
-- パーティション p0 には 2021-10-01 (トランジションポイント) より前のデータが格納されます。
-- 2021-10-01 以降のデータは、月次パーティションを自動的に作成します。
ALTER TABLE orders
PARTITION BY RANGE COLUMNS(orderdate) INTERVAL(MONTH, 1) (
  PARTITION p0 VALUES LESS THAN('2021-10-01')
);

レンジパーティションテーブルからインターバル・レンジ・パーティション表への変換

2 つのメソッドが利用可能です。どちらも既存のレンジパーティションテーブルにインターバルを追加します。

方法 1:パーティションスキームの再定義 (8.0.2.2.0 以降が必要)

このメソッドを使用して、単一のステートメントでパーティションキーとインターバルの両方を変更します。

CREATE TABLE orders(
  orderkey BIGINT NOT NULL,
  custkey  BIGINT NOT NULL,
  orderdate DATE NOT NULL
)
PARTITION BY RANGE(orderkey) (
  PARTITION p0 VALUES LESS THAN(10000000)
);

-- パーティションスキームを再定義:キーを orderdate に切り替え、月次インターバルを追加します。
ALTER TABLE orders
PARTITION BY RANGE COLUMNS(orderdate) INTERVAL(MONTH, 1) (
  PARTITION p0 VALUES LESS THAN('2021-10-01')
);

方法 2:既存のレンジパーティションテーブルにインターバルを設定 (8.0.2.2.1 以降が必要)

テーブルがすでに正しいキーでパーティション化されており、インターバルパーティション化を有効にするだけでよい場合、このメソッドを使用します。

CREATE TABLE orders(
  orderkey BIGINT NOT NULL,
  custkey  BIGINT NOT NULL,
  orderdate DATE NOT NULL
)
PARTITION BY RANGE COLUMNS(orderdate) (
  PARTITION p0 VALUES LESS THAN('2021-10-01')
);

-- 月次インターバルでインターバルパーティション化を有効にします。
ALTER TABLE orders SET INTERVAL(MONTH, 1);

インターバル・レンジ・パーティション表からレンジパーティションテーブルへの変換

インターバル定義を削除すると、既存のすべてのインターバルパーティションが名前付きのレンジパーティションに変換されます。

方法 1:パーティションスキームの再定義 (8.0.2.2.0 以降が必要)

CREATE TABLE orders(
  orderkey BIGINT NOT NULL,
  custkey  BIGINT NOT NULL,
  orderdate DATE NOT NULL
)
PARTITION BY RANGE(orderkey) INTERVAL(100000) (
  PARTITION p0 VALUES LESS THAN(10000000)
);

-- INTERVAL 句なしで再定義して、レンジパーティションテーブルに変換します。
ALTER TABLE orders
PARTITION BY RANGE COLUMNS(orderdate) (
  PARTITION p0 VALUES LESS THAN('2021-10-01')
);

方法 2:インターバルのクリア (8.0.2.2.1 以降が必要)

引数なしで SET INTERVAL() を呼び出して、インターバルパーティション化を無効にします。既存のインターバルパーティションはレンジパーティションになります。

CREATE TABLE orders(
  orderkey BIGINT NOT NULL,
  custkey  BIGINT NOT NULL,
  orderdate DATE NOT NULL
)
PARTITION BY RANGE(orderkey) INTERVAL(100000) (
  PARTITION p0 VALUES LESS THAN(10000000)
);

-- インターバルパーティション化を無効にします。既存のインターバルパーティションはレンジパーティションとして保持されます。
ALTER TABLE orders SET INTERVAL(); /* インターバルの型と値を指定せずに、インターバル・レンジ・パーティション表をレンジパーティションテーブルに切り替えます。 */