OceanBaseデータベースでは、DYNAMIC_PARTITION_POLICYブロックを使用して、テーブル作成時にダイナミックパーティション管理のプロパティを指定します。
本記事では、SQLステートメントを使用してダイナミックパーティションテーブルを作成する方法について説明します。
説明
OceanBaseデータベースV4.3.5では、V4.3.5 BP2バージョンから DYNAMIC_PARTITION_POLICY を指定してダイナミックパーティションテーブルを作成できるようになりました。
制限事項と注意点
現在のバージョンでは、動的パーティションテーブルを作成するには少なくとも1つのパーティション定義を指定する必要があります。
Range ColumnsパーティションとRangeパーティションのみサポートされています:
- Range Columnsパーティション:パーティションキーが
date、datetime、timestamp、year、bigint(精度はBIGINT_PRECISIONで指定)タイプのパーティションテーブルで動的パーティション管理を有効にできます。 - Rangeパーティション:パーティションキーが
year、bigint(精度はBIGINT_PRECISIONで指定)タイプのパーティションテーブルで動的パーティション管理を有効にできます。
- Range Columnsパーティション:パーティションキーが
動的パーティション管理は、パーティションテーブルおよびコンポジット・パーティションテーブルのパーティションに対してのみ有効です。
テーブル作成後、事前に作成されたパーティションや期限切れのパーティションの削除は即時には実行されません。次回の動的パーティション管理タスクの自動スケジューリング、または手動でのスケジューリングを待機する必要があります。動的パーティション管理タスクの詳細については、動的パーティション管理タスクを参照してください。
権限要件
動的分割テーブルを作成するには、CREATE権限が必要です。OceanBaseデータベースの権限の詳細については、MySQLモードの権限分類を参照してください。
構文
動的パーティションテーブルを作成するSQLステートメントの書式は以下のとおりです:
CREATE TABLE [IF NOT EXISTS] table_name (table_definition_list)
DYNAMIC_PARTITION_POLICY [=] (dynamic_partition_policy_list)
partition_option;
dynamic_partition_policy_list:
dynamic_partition_policy_option [, dynamic_partition_policy_option ...]
dynamic_partition_policy_option:
ENABLE = {true | false}
| TIME_UNIT = {'hour' | 'day' | 'week' | 'month' | 'year'}
| PRECREATE_TIME = {'-1' | '0' | 'n {hour | day | week | month | year}'}
| EXPIRE_TIME = {'-1' | '0' | 'n {hour | day | week | month | year}'}
| TIME_ZONE = {'default' | 'time_zone'}
| BIGINT_PRECISION = {'none' | 'us' | 'ms' | 's'}
動的パーティション管理プロパティの説明
| プロパティ名 | 説明 | 必須 | 変更は可能か |
|---|---|---|---|
| ENABLE | 動的パーティション管理を有効にするかどうかを示します。値は以下のとおりです:
|
いいえ | はい |
| TIME_UNIT | パーティションの時間単位、つまり自動的にパーティション境界を作成する間隔を示します。値は以下のとおりです:
|
はい | いいえ |
| PRECREATE_TIME | 事前作成時間を示します。動的パーティション管理をスケジュールするたびに、パーティションが事前に作成され、最大パーティション上界 > now() + precreate_time となります。値は以下のとおりです:
説明
|
いいえ | はい |
| EXPIRE_TIME | パーティションの有効期限を示します。動的パーティション管理をスケジュールするたびに、パーティション上界 < now() - expire_time のすべての期限切れパーティションが削除されます。値は以下のとおりです:
|
いいえ | はい |
| TIME_ZONE | 現在の時間と日付時刻型(date、datetime、year タイプ)のパーティションキーのサイズを比較する際に依存するタイムゾーン情報を示します。値は以下のとおりです:
|
いいえ | いいえ |
| BIGINT_PRECISION | bigint タイプのパーティションキーのタイムスタンプの精度を示します。値は以下のとおりです:
|
いいえ | いいえ |
テーブル作成構文の詳細なパラメータについては、CREATE TABLEを参照してください。
動的パーティションのパラメータ制限
TIME_UNIT:パーティションキーがdateタイプの場合、パラメータTIME_UNITにhourを指定することはできません。パーティションキーがyearタイプの場合、パラメータTIME_UNITにはyearのみを指定できます。PRECREATE_TIME:最大で2048個のパーティションを事前に作成できます。TIME_ZONE:パーティションキーがdate、datetime、またはyearタイプの場合にのみ、パラメータTIME_ZONEでカスタムタイムゾーンオフセット値を指定できます。他のタイプではdefaultのみを指定できます。BIGINT_PRECISION:このパラメータの値をus、ms、sに指定できるのは、パーティションキーのタイプがbigintの場合のみです。他のパーティションキーのタイプでは、このパラメータの値はnoneのみです。TIME_UNIT、TIME_ZONE、BIGINT_PRECISIONは一度指定すると変更できません。
例
動的パーティションテーブル test_tbl1 を作成し、動的パーティションのプロパティを次のように設定します。
- パーティション境界は毎時間で分割されます。
- 現在の時刻から3時間以内のパーティションを事前に作成します。
- パーティションの上限が現在の時刻より1日前のものは削除します。
- 北京時間(UTC+8)を使用して時間を判断し、パーティション境界と有効期限のロジックがこのタイムゾーンに基づくようにします。
- パーティションキー
col2はDATETIMEタイプであり、bigintのタイムスタンプ精度を設定する必要はありません。
CREATE TABLE test_tbl1 (col1 INT, col2 DATETIME)
DYNAMIC_PARTITION_POLICY(
ENABLE = true,
TIME_UNIT = 'hour',
PRECREATE_TIME = '3 hour',
EXPIRE_TIME = '1 day',
TIME_ZONE = '+8:00',
BIGINT_PRECISION = 'none'
)
PARTITION BY RANGE COLUMNS (col2)(
PARTITION P0 VALUES LESS THAN ('2025-04-15 13:30:00')
);
説明
テーブル作成後、事前にパーティションを作成し、期限切れのパーティションを削除する操作は即座に実行されません。次回の動的パーティション管理タスクが自動的にスケジュールされるか、手動で動的パーティション管理タスクをスケジュールする必要があります。詳細については、動的パーティション管理タスクを参照してください。