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

PolarDB:間隔範囲パーティションの作成

最終更新日:Feb 18, 2025

このトピックでは、間隔範囲パーティションを作成する方法について説明します。

前提条件

クラスターのバージョンは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 ')
);