このトピックでは、間隔範囲パーティションを作成する方法について説明します。
前提条件
クラスターのバージョンはPolarDB for MySQL 8.0.2で、クラスターのリビジョンバージョンは8.0.2.2.0以降である必要があります。 クラスターのバージョンを表示する方法については、「エンジンバージョンの照会」をご参照ください。
構文
CREATE TABLE [存在しない場合] [schema.]table_name
table_definition
partition_options; partition_optionsは、
partition BYです。
{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] INTERVAL句は、間隔値 (expr) とinterval型 (type) のみをサポートします。
パラメーター
パラメーター | 説明 |
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 | ストレージエンジンの名前。 |
間隔値 (expr)
次の例では、すべての1000隣接する番号を1つのパーティションに追加します。
INTERVAL(1000)時間タイプ
YEAR
次の例では、間隔タイプをYEARに設定し、1年のデータをパーティションに追加します。
インターバル (YEAR, 1)QUARTER
次の例では、間隔タイプをQUARTERに設定し、パーティションに4分の1のデータを追加します。
interval (quarter, 1)MONTH
次の例では、間隔タイプをMONTHに設定し、1か月のデータをパーティションに追加します。
インターバル (月、1)WEEK
次の例では、間隔タイプをWEEKに設定し、1週間のデータをパーティションに追加します。
インターバル (週、1)DAY
次の例では、間隔タイプをDAYに設定し、1日のデータをパーティションに追加します。
インターバル (DAY, 1)HOUR
次の例では、間隔タイプをHOURに設定し、1時間のデータをパーティションに追加します。
interval (hour, 1)MINUTE
次の例では、間隔タイプをMINUTEに設定し、1分のデータをパーティションに追加します。
interval (minute, 1)SECOND
次の例では、間隔タイプをSECONDに設定し、60秒ごとのデータをパーティションに追加します。
interval (SECOND, 60)
例
order_timeをパーティションキーとして使用して、salesテーブルを間隔でパーティション化します。 間隔範囲パーティションテーブルを作成するときは、初期遷移ポイントを指定する必要があります。 その後、遷移ポイントを超えて新しいパーティションを自動的に作成できます。
データベースに間隔範囲パーティションテーブルを作成し、テーブルにデータを入力します。
(
id BIGINT,
uid BIGINT、
order_time DATETIME
)
レンジコラムによるパーティー (order_time) インターバル (月, 1)
(
PARTITION p0はより少ない値 ('2021-9-1 ')
); interval range partitioned tableにdataを入力します。
INSERT INTO sales VALUES(1, 1010101010, '2021-11-11 '); SHOW CREATE TABLEステートメントを実行して、データが挿入された後にsalesテーブル定義を照会します。 次の新しいテーブル定義が表示されます。
CREATE table 'sales' ()
'id' bigint(20) DEFAULT NULL、
'uid 'bigint(20) DEFAULT NULL、
'order_time' datetime DEFAULT NULL
) エンジン=InnoDBデフォルト料金=utf8
/*!50500パーティーBY RANGE COLUMNS(order_time) * /*!99990 800020200インターバル (月, 1) * /
/*!50500 (PARTITION p0の値は ('2021-9-1 ') より少ない) エンジン=InnoDB、
PARTITION _p20211001000000未満の値 ('2021-10-01 00:00:00 ') エンジン=InnoDB、
PARTITION _p20211101000000未満の値 ('2021-11-01 00:00:00 ') エンジン=InnoDB、
PARTITION _p20211201000000未満の値 ('2021-12-01 00:00:00 ') ENGINE = InnoDB) */ 間隔範囲のパーティション分割の使用後に、3つのパーティション_p20211001000000、_p20211101000000、および_p20211201000000が追加されます。 _pが前に付けられたパーティション名は、システムによって予約されます。 このようなパーティション名は、パーティションを作成または名前変更するときには使用できません。 たとえば、ADD partitionおよびREORGANIZE PARTITIONステートメントを実行する場合、'_p' の接頭辞が付いたパーティション名は使用できません。 ただし、このようなパーティション名は、DROP partitionステートメントを実行するときに使用できます。
このシナリオでは、挿入された値が遷移ポイントに達する前にパーティションを手動で追加できます。 ただし、誤った操作によりデータ挿入が失敗する可能性があります。 間隔範囲パーティションテーブルを作成すると、パーティションを自動的に作成して、データの挿入を迅速に行うことができます。
最大8,192個のパーティションを作成できるため、自動作成されるパーティションの数は制限されます。 パーティション分割テーブルライフサイクル管理ソリューションで間隔範囲パーティション分割を使用して、パーティションを作成し、コールドデータが配置されているパーティションを定期的にOSSに移行できます。
その他の例:
/* 間隔タイプを数値に設定し、間隔値を1000 * /
CREATE TABLE t(a int, b datetime)
レンジによる参加 (a) インターバル (1000) (
PARTITION p0の値がより少ない (1000)
);
/* パーティション式はINT_RESULTのみであるため、間隔値のみを設定し、間隔タイプをスキップします。 * /
CREATE TABLE t(a int, b datetime)
レンジによるパーティー (月 (b)) インターバル (1) (
PARTITION p0の値がより少ない (2)
);
/* パーティションキーが時間タイプではないため、間隔タイプを数値に、間隔値を1000に設定します。 * /
CREATE TABLE t(a int, b datetime)
レンジコラムによるパーティー (a) インターバル (1000) (
PARTITION p0の値がより少ない (1000)
);
/* 間隔を1年に設定します。 * /
CREATE TABLE t(a int, b datetime)
レンジコラムによるパーティー (b) インターバル (年、1) (
パートp0はより少ない値 ('2021-11-01 00:00:00 ')
);