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

PolarDB:間隔範囲の分割

最終更新日:May 28, 2024

間隔範囲分割は、範囲分割の拡張である。 これにより、挿入されるデータが既存のパーティションの範囲を超えると、データベースは自動的にパーティションを作成できます。

間隔範囲パーティション分割を実装するには、interval句を含め、新しいパーティションの範囲サイズを指定する必要があります。 範囲区分キー値は、範囲区分の高い値を決定する。 挿入されるデータの値が指定された高い値を超えると、データベースは新しいデータを格納するパーティションを作成します。

間隔を1か月に設定したとします。 挿入されるデータが現在の遷移点から2か月後に生成されたデータを参照する場合、データが属する月のパーティションのみが作成されます。 その間の月のパーティションは作成されません。 遷移点はキー値である。 データが遷移点を超えると、データは次の間隔範囲パーティションに挿入されます。 間隔範囲分割テーブルを作成するとします。 間隔は1か月で、現在の移行ポイントは2019年2月15日です。 2019年5月10日のデータを挿入しようとすると、データベースは2019年5月15日2019月15日のパーティションを作成します。 次に、このパーティションにデータが挿入されます。 2019年2月15日2019日から3月15日までのパーティションと2019年3月15日2019日から4月15日までのパーティションはスキップされます。

制限事項

  • 間隔範囲の分割は、単一のパーティションキーに制限されます。 このキーは、数値または日付範囲を指定する必要があります。
  • 少なくとも1つのレンジパーティションを定義する必要があります。
  • インデックス編成テーブルにINTERVAL句を使用することはできません。
  • リストパーティションテーブルにドメインインデックスを作成することはできません。
  • パーティションキー列にNULL、Not-a-Number、またはInfinityの値を指定することはできません。
  • 区間範囲分割を実装するために使用される式は、非負の定数値を生成する必要があります。
  • 間隔範囲パーティションテーブルのパーティションは、昇順でのみ作成できます。

構文

CREATE TABLE [スキーマ] 。 ]<table_name>
   <table_definition>
   RANGEによるパーティション (<column>[, <column> ]...)
   [INTERVAL (<constant> | <expression>)]
   [SUBPARTITION BY {RANGE | リスト | ハッシュ} (<column>[, <column> ]...)]
   (<range_partition_definition>[, <range_partition_definition>]...);
range_partition_definitionは次のとおりです。
      PARTITION [<partition_name>]
        より少ない値 (<value>[, <value>]...)
        [TABLESPACE <tablespace_name>]
        [(<サブパーティション>, ...)] 

INTERVALパラメーターは、数値と時間間隔のみをサポートします。

  • 数値インターバル

    次のステートメントは、10個ごとに隣接する番号を1つのパーティションに挿入します。

    インターバル (10)
  • 時間間隔
    • 次のステートメントは、年ごとの自動パーティショニングを設定します。

      インターバル (NUMTOYMINTERVAL(1、'year'))
    • 次のステートメントは、月ごとの自動パーティショニングを設定します。

      INTERVAL (NUMTOYMINTERVAL(1、'month'))
    • 次のステートメントは、日ごとの自動パーティショニングを設定します。

      INTERVAL (NUMTODSINTERVAL(1,'day '))
    • 次のステートメントは、週ごとの自動パーティショニングを設定します。

      INTERVAL (NUMTODSINTERVAL(7、'day '))

その他のパラメーターについては、「CREATE TABLE... 」をご参照ください。 パーティー

次の例では、salesテーブルは、指定された間隔でsold_month列に基づいてパーティション分割されます。 レンジパーティションは、遷移ポイントを確立するために作成されます。 遷移ポイントを超えた値は、新しいパーティションに挿入されます。

次の例に示すように、区間範囲分割テーブルを作成し、テーブルにデータを追加します。

テーブルの販売を作成する
(
  prod_id int,
  prod_quantity int、
  sold_month日付
)
範囲によるパーティー (sold_month)
インターバル (NUMTOYMINTERVAL(1、'MONTH'))
(
  パーティーp1
    より少ない値 ('15-JAN-2019 ') 、
  パーティーp2
    より少ない値 ('15-FEB-2019 ')
); 

次の例に示すように、ALL_TAB_PARTITIONSビューを照会します。

SELECT partition_name、ALL_TAB_PARTITIONSからのhigh_value;

次の応答が返されます。

partition_name | high_value
---------------- + ----------------------
 P1 | FOR VALUES FROM ('15-JAN-19 00:00:00 ') TO ('15-FEB-19 00:00:00')
 P2 | (ミンバル) から ('15-JAN-19 00:00:00 ') までの値
(2行) 

次の例に示すように、レンジパーティションの高値を超えるデータをsalesテーブルに挿入します。

販売値に挿入 (1,200、'10-MAY-2019 ');
挿入0 1 

データを挿入した後、次の例に示すように、ALL_TAB_PARTITIONSビューを再度クエリします。

SELECT partition_name、ALL_TAB_PARTITIONSからのhigh_value;

データが挿入されると、システムは間隔範囲パーティションの名前を生成します。 名前はセッションによって異なります。 次の応答が返されます。

partition_name | high_value
---------------- + ----------------------
 SYS596430103 | ('15-APR-19 00:00:00 ') から ('15-MAY-19 00:00:00') までの値
 P1 | FOR VALUES FROM ('15-JAN-19 00:00:00 ') TO ('15-FEB-19 00:00:00')
 P2 | (ミンバル) から ('15-JAN-19 00:00:00 ') までの値
(3行)