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

ApsaraDB for OceanBase (Deprecated):パーティション分割戦略の設定

最終更新日:Jan 19, 2025

このトピックでは、パーティション作成戦略とパーティション削除戦略を設定する方法について説明します。

パーティション作成戦略

重要
  • テーブルグループ内のテーブルのパーティションを作成すると、失敗したり、ロードバランシングの状態が崩れたりする可能性があります。このようなテーブルのパーティション作成戦略を設定する場合は、注意して進めてください。

  • 同じテーブルグループ内のテーブルは同じ数のパーティションを持つ必要があるため、テーブルグループ内のテーブルのパーティションを作成すると、テーブルグループが無効になる可能性があります。

カスタムパーティション作成戦略

SQL 式を使用してパーティションの上限を生成するカスタムパーティション作成戦略を作成できます。次の手順を実行します。

  1. SQL 式を使用して、パーティション作成の開始時刻である基準時刻を取得します。

    説明

    パーティション分割計画が実行された時刻を開始時刻として使用するには、now() 関数またはSYSDATE 関数を使用します。

  2. パーティションを生成する時間間隔を設定します。パーティション分割計画は、指定された時間間隔に基づいてパーティションを生成します。 フィールドに時間間隔を入力すると、OceanBase Developer Center (ODC) は 間隔フィールド、OceanBase 開発者センター (ODC) では、${INTERVAL} 式を使用してこの時間間隔を参照し、手順 1 で生成された SQL 式に追加します。

  3. パーティションキーと同じデータ型のパーティション式を生成します。ステップ 1 とステップ 2 の完了後に生成された時間型の SQL 式を、パーティションキーの実際の型に変換します。パーティションキーと SQL 式が同じ型の場合は、このステップをスキップします。

カスタムパーティション作成戦略で変数を参照できます。次の表に、サポートされている式を示します。

説明

間隔

パーティションを生成する時間間隔です。ODC は、この変数を フィールドの値で置き換えます。このフィールドは、 列の セクションにあります。間隔フィールド内の ルール列の 作成ルールセクション。

${INTERVAL}

通常、カスタムパーティション作成方法を選択した場合、時間型ではないパーティションキーに対して、時間型に基づいてパーティションが生成されます。次のクイックリファレンステーブルは、正しい SQL 式をすばやく記述するのに役立ちます。

MySQL モードのパーティションの上限を生成するための式

パーティション分割式の例

説明

時間間隔

パーティションの上限を計算するための SQL 式

... ('2024') より小さい値

年単位で生成

1

date_format(now() + interval ${INTERVAL} year, '''%Y''')

... ('202401') より小さい値

年単位で生成

1

date_format(now() + interval ${INTERVAL} year, '''%Y01''')

月ごとに生成

1

date_format(now() + interval ${INTERVAL} month, '%Y%m')

... ('2024-01') より小さい値

年単位で生成

1

date_format(now() + interval ${INTERVAL} year, '''%Y-01''')

月ごとに生成

1

date_format(now() + interval ${INTERVAL} month, '%Y-%m')

... ('2024/01') より小さい値

年単位で生成

1

date_format(now() + interval ${INTERVAL} year, '''%Y/01''')

月ごとに生成

1

date_format(now() + interval ${INTERVAL} month, '%Y/%m')

... ('20240101') より小さい値

年単位で生成

1

date_format(now() + interval ${INTERVAL} year, '''%Y0101''')

月ごとに生成

1

date_format(now() + interval ${INTERVAL} month,'%Y%m01')

日単位で生成

1

date_format(now() + interval ${INTERVAL} day,'%Y%m%d')

... ('2024-01-01') より小さい値

年単位で生成

1

date_format(now() + interval ${INTERVAL} year, '''%Y-01-01''')

月ごとに生成

1

date_format(now() + interval ${INTERVAL} month, '''%Y-%m-01''')

日単位で生成

1

date_format(now() + interval ${INTERVAL} day,'%Y-%m-%d')

... ('2024/01/01') より小さい値

年ごとに生成

1

date_format(now() + interval ${INTERVAL} year, '''%Y/01/01''')

月ごとに生成

1

date_format(now() + interval ${INTERVAL} month, '''%Y/%m/01''')

日単位で生成

1

date_format(now() + interval ${INTERVAL} day,'%Y/%m/%d')

... ('2024-01-01 00:00:00') より小さい値

年単位で生成

1

date_format(now() + interval ${INTERVAL} year, '''%Y-01-01 00:00:00''')

月ごとに生成

1

date_format(now() + interval ${INTERVAL} month, '''%Y-%m-01 00:00:00''')

日単位で生成

1

date_format(now() + interval ${INTERVAL} day, '''%Y-%m-%d 00:00:00''')

... ('2024/01/01 00:00:00') より小さい値

年単位で生成

1

date_format(now() + interval ${INTERVAL} year, '''%Y/01/01 00:00:00''')

月ごとに生成

1

date_format(now() + interval ${INTERVAL} month, '''%Y/%m/01 00:00:00''')

日単位で生成

1

date_format(now() + interval ${INTERVAL} day, '''%Y/%m/%d 00:00:00''')

... (2024) より小さい値

年単位で生成

1

date_format(now() + interval ${INTERVAL} year,'%Y')

... (202401) より小さい値

年単位で生成

1

date_format(now() + interval ${INTERVAL} year, '%Y01')

月ごとに生成

1

date_format(now() + interval ${INTERVAL} month,'%Y%m')

(20240101) より小さい値...

年単位で生成

1

date_format(now() + interval ${INTERVAL} year, '%Y0101')

月ごとに生成

1

date_format(now() + interval ${INTERVAL} month,'%Y%m01')

日単位で生成

1

date_format(now() + interval ${INTERVAL} day,'%Y%m%d')

(1709222400) より小さい値...

注: UNIX タイムスタンプ

年ごとに生成

1

unix_timestamp(str_to_date(date_format(now() + interval ${INTERVAL} year, '%Y-01-01 00:00:00'), '%Y-%m-%d %H:%i:%s'))

INTERVAL

パーティションを生成する時間間隔。ODC は、この変数を [作成ルール] セクションの [ルール] 列にある [間隔] フィールドの値に置き換えます。

${INTERVAL}

日単位で生成

1

unix_timestamp(str_to_date(date_format(now() + interval ${INTERVAL} day, '%Y-%m-%d 00:00:00'), '%Y-%m-%d %H:%i:%s'))

Oracle モードでのパーティションの上限生成のための式

パーティション分割式の例

説明

時間間隔

パーティションの上限を計算するための SQL 式

... ('2024') 未満の値

年単位で生成

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY''')

... ('202401') 未満の値

年単位で生成

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY"01"''')

月単位で生成

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYYMM''')

... ('2024-01') 未満の値

年単位で生成

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-"01"''')

月単位で生成

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-MM''')

... ('2024/01') 未満の値

年単位で生成

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/"01"''')

月単位で生成

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/MM''')

... ('20240101') 未満の値

年単位で生成

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY"01""01"''')

月単位で生成

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYYMM"01"''')

日単位で生成

NUMTODSINTERVAL(1, 'DAY')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYYMMDD''')

... ('2024-01-01') 未満の値

年単位で生成

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-"01"-"01"''')

月単位で生成

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-MM-"01"''')

日単位で生成

NUMTODSINTERVAL(1, 'DAY')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-MM-DD''')

... ('2024/01/01') 未満の値

年単位で生成

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/"01"/"01"''')

月単位で生成

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/MM/"01"''')

日単位で生成

NUMTODSINTERVAL(1, 'DAY')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/MM/DD''')

... ('2024-01-01 00:00:00') 未満の値

年単位で生成

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-"01"-"01 00:00:00"''')

月単位で生成

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-MM-"01 00:00:00"''')

日単位で生成

NUMTODSINTERVAL(1, 'DAY')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY-MM-DD "00:00:00"''')

... ('2024/01/01 00:00:00') 未満の値

年単位で生成

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/"01"/"01 00:00:00"''')

月単位で生成

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/MM/"01 00:00:00"''')

日単位で生成

NUMTODSINTERVAL(1, 'DAY')

TO_CHAR(SYSDATE + ${INTERVAL}, '''YYYY/MM/DD "00:00:00"''')

... (2024) 未満の値

年単位で生成

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, 'YYYY')

... (202401) 未満の値

年単位で生成

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, 'YYYY"01"')

月単位で生成

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, 'YYYYMM')

... (20240101) 未満の値

年単位で生成

NUMTOYMINTERVAL(1, 'YEAR')

TO_CHAR(SYSDATE + ${INTERVAL}, 'YYYY"01""01"')

月単位で生成

NUMTOYMINTERVAL(1, 'MONTH')

TO_CHAR(SYSDATE + ${INTERVAL}, 'YYYYMM"01"')

日単位で生成

NUMTODSINTERVAL(1, 'DAY')

TO_CHAR(SYSDATE + ${INTERVAL}, 'YYYYMMDD')

順次増加作成戦略

  • この 順次増加メソッドは、時間型のパーティションキーにのみ適用されます。

  • このメソッドの基準時間は、現在の時間または指定された時間にすることができます。パーティションは、指定された時間間隔に基づいて順番に生成されます。

パーティション名生成戦略

パーティションの内容に関連するパーティション名を生成するには、さまざまな方法を使用できます。

現在、2 つのパーティション名生成戦略が提供されています。

  • プレフィックス + サフィックス戦略: この戦略に基づいて生成されるパーティション名は、プレフィックスとサフィックスで構成されます。プレフィックスは文字列定数であり、サフィックスは時間型の指定されたパーティションキーの SQL 式の値を参照します。プレフィックス、サフィックス、参照時間、および出力フォーマットを変更して、異なるパーティション名を生成できます。

    image

    重要

    この戦略は、時間型のパーティションキーに対してのみ有効です。サフィックスによって参照されるパーティションキーは時間型であるため、その SQL 式の値は時間値に変換され、フォーマットされてパーティション名のサフィックスとして出力されます。

  • カスタム戦略: この戦略は、命名式を使用して、ユーザー要件を満たすパーティション名を生成します。パーティションキーの SQL 式の値は、 を介して命名式で参照できます。${パーティショニング キー}

    image

次のクイック リファレンス表に、ODC がパーティション名の生成に提供する一般的な式を示します。表内のパーティション キーは、数値または文字型である必要があります。

MySQL モードでのパーティション名の生成式

サンプル分割式

命名式

プレビュー

... values less than (..., 2024, ...)

concat('P', ${partitioning key})

P2024

... values less than (..., '2024', ...)

... values less than (..., 202401, ...)

concat('P', ${partitioning key})

P202401

... values less than (..., '202401', ...)

... values less than (..., '2024-01', ...)

date_format(str_to_date(concat(${partitioning key}, '-01'), '%Y-%m-%d'), 'P%Y%m')

P202401

date_format(str_to_date(concat(${partitioning key}, '-01'), '%Y-%m-%d'), 'P%Y_%m')

P2024_01

... values less than (..., '2024/01', ...)

date_format(str_to_date(concat(${partitioning key}, '/01'), '%Y/%m/%d'), 'P%Y%m')

P202401

date_format(str_to_date(concat(${partitioning key}, '/01'), '%Y/%m/%d'), 'P%Y_%m')

P2024_01

... values less than (..., 20240101, ...)

concat('P', ${partitioning key})

P20240101

... values less than (..., '20240101', ...)

... values less than (..., '2024-01-01', ...)

date_format(str_to_date(${partitioning key}, '%Y-%m-%d'), 'P%Y%m%d')

P20240101

date_format(str_to_date(${partitioning key}, '%Y-%m-%d'), 'P%Y_%m_%d')

P2024_01_01

... values less than (..., '2024/01/01', ...)

date_format(str_to_date(${partitioning key}, '%Y/%m/%d'), 'P%Y%m%d')

P20240101

date_format(str_to_date(${partitioning key}, '%Y/%m/%d'), 'P%Y_%m_%d')

P2024_01_01

... values less than (..., '2024-01-01 00:00:00', ...)

date_format(str_to_date(${partitioning key}, '%Y-%m-%d %H:%i:%s'), 'P%Y%m%d')

P20240101

date_format(str_to_date(${partitioning key}, '%Y-%m-%d %H:%i:%s'), 'P%Y_%m_%d')

P2024_01_01

... values less than (..., '2024/01/01 00:00:00', ...)

date_format(str_to_date(${partitioning key}, '%Y/%m/%d %H:%i:%s'), 'P%Y%m%d')

P20240101

date_format(str_to_date(${partitioning key}, '%Y/%m/%d %H:%i:%s'), 'P%Y_%m_%d')

P2024_01_01

... values less than (..., 1709222400, ...)

注: タイムスタンプ(秒単位)

date_format(from_unixtime(${partitioning key}), 'P%Y')

P2024

date_format(from_unixtime(${partitioning key}), 'P%Y%m')

P202401

date_format(from_unixtime(${partitioning key}), 'P%Y_%m')

P2024_01

date_format(from_unixtime(${partitioning key}), 'P%Y%m%d')

P20240101

date_format(from_unixtime(${partitioning key}), 'P%Y_%m_%d')

P2024_01_01

Oracle モードでのパーティション名の生成式

パーティション分割式の例

命名式

プレビュー

... 値が (...、2024、...) 未満

concat('P', ${パーティション分割キー})

P2024

... 値が (...、'2024'、...) 未満

... 値が (...、202401、...) 未満

concat('P', ${パーティション分割キー})

P202401

... 値が (...、'202401'、...) 未満

... 値が (...、'2024-01'、...) 未満

TO_CHAR(TO_DATE(CONCAT(${パーティション分割キー}, '-01'), 'YYYY-MM-DD'), '"P"YYYYMM')

P202401

TO_CHAR(TO_DATE(CONCAT(${パーティション分割キー}, '-01'), 'YYYY-MM-DD'), '"P"YYYY_MM')

P2024_01

... 値が (...、'2024/01'、...) 未満

TO_CHAR(TO_DATE(CONCAT(${パーティション分割キー}, '/01'), 'YYYY/MM/DD'), '"P"YYYYMM')

P202401

TO_CHAR(TO_DATE(CONCAT(${パーティション分割キー}, '/01'), 'YYYY/MM/DD'), '"P"YYYY_MM')

P2024_01

... 値が (...、20240101、...) 未満

concat('P', ${パーティション分割キー})

P20240101

... 値が (...、'20240101'、...) 未満

... 値が (...、'2024-01-01'、...) 未満

TO_CHAR(TO_DATE(${パーティション分割キー}, 'YYYY-MM-DD'), '"P"YYYYMMDD')

P20240101

TO_CHAR(TO_DATE(${パーティション分割キー}, 'YYYY-MM-DD'), '"P"YYYY_MM_DD')

P2024_01_01

... 値が (...、'2024/01/01'、...) 未満

TO_CHAR(TO_DATE(${パーティション分割キー}, 'YYYY/MM/DD'), '"P"YYYYMMDD')

P20240101

TO_CHAR(TO_DATE(${パーティション分割キー}, 'YYYY/MM/DD'), '"P"YYYY_MM_DD')

P2024_01_01

... 値が (...、'2024-01-01 00:00:00'、...) 未満

TO_CHAR(TO_DATE(${パーティション分割キー}, 'YYYY-MM-DD HH24:MI:SS'), '"P"YYYYMMDD')

P20240101

TO_CHAR(TO_DATE(${パーティション分割キー}, 'YYYY-MM-DD HH24:MI:SS'), '"P"YYYY_MM_DD')

P2024_01_01

... 値が (...、'2024/01/01 00:00:00'、...) 未満

TO_CHAR(TO_DATE(${パーティション分割キー}, 'YYYY/MM/DD HH24:MI:SS'), '"P"YYYYMMDD')

P20240101

TO_CHAR(TO_DATE(${パーティション分割キー}, 'YYYY/MM/DD HH24:MI:SS'), '"P"YYYY_MM_DD')

P2024_01_01

パーティション削除戦略

重要
  • グローバルインデックスを含むテーブルからパーティションを削除すると、グローバルインデックスが無効になります。 慎重に進んでください。 グローバルインデックスの再構築を選択すると、時間のかかるプロセス、または再構築の失敗によるオンラインの問題が原因で、ビジネス上の問題が発生する可能性があります。

  • グローバルインデックスを再構築するオプションは、Oracle モードでのみ提供されます。 MySQL モードでは、グローバルインデックスはデフォルトで再構築されます。

  • パーティション削除ストラテジーを設定する場合は、事前に作成されたパーティションの影響を考慮し、履歴パーティションを誤って削除しないようにする必要があります。たとえば、テーブルのパーティションが月ごとに生成されるとします。過去 12 か月間に生成されたパーティションを保持するには、[予約パーティション数]12 に設定します。パーティション作成ストラテジーによって 3 か月分のパーティションが事前に作成されている場合、過去 9 か月間と今後 3 か月間に作成されたパーティションが実際に保持されます。

パーティション削除ストラテジは、既存のパーティションに適用されます。現在、サポートされている削除ストラテジは 1 つだけで、最新の N 個のパーティションが保持され、それ以外のパーティションは削除されます。

例を次に示します。

  1. 」という名前のテーブルを作成します次数 が含まれているp2023_01 および p2023_02 パーティション。

    CREATE TABLE `order` (
    `time` date NOT NULL,
    `parti_key` int(11),
     `name` varchar(120) DEFAULT NULL
    ) partition by range columns(time, parti_key)
    (partition p2023_01 values less than ('2023-01-01', 20230101),
    partition p2023_02 values less than ('2023-02-01', 20230201))
    
  2. テーブルの最新のパーティションを保持するパーティション削除戦略を構成します。次数 テーブル。

  3. パーティション削除ストラテジーに基づいて作成されたパーティション削除文は、p2023_01 パーティションを削除します。

考慮事項

  • テーブルグループ内のテーブルにパーティションを作成すると、ロードバランシングの状態が失敗または中断する可能性があります。このようなテーブルのパーティション作成戦略を構成する場合は、注意して進めてください。

  • 同じテーブルグループ内のテーブルは同じ数のパーティションを持つ必要があるため、テーブルグループ内のテーブルにパーティションを作成すると、テーブルグループが無効になる可能性があります。

  • グローバルインデックスを含むテーブルからパーティションを削除すると、グローバルインデックスが無効になります。注意して進めてください。グローバルインデックスの再構築を選択すると、時間のかかるプロセスが原因でビジネス上の問題が発生したり、再構築の失敗が原因でオンラインの問題が発生したりする可能性があります。

  • グローバルインデックスを再構築するオプションは、Oracle モードでのみ提供されます。MySQL モードでは、グローバルインデックスはデフォルトで再構築されます。

参照資料