17.00 - 17.05 - RANGE_N関数とCASE_N関数 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ定義言語 詳細トピック

Product
Advanced SQL Engine
Teradata Database
Release Number
17.00
17.05
Release Date
2020年6月
Content Type
プログラミング リファレンス
Publication ID
B035-1184-170K-JPN
Language
日本語 (日本)

RANGE_N関数とCASE_N関数の一般的なガイドライン

RANGE_N関数とCASE_N関数を使用してパーティション式を作成する場合、以下のルールが適用されます。

  • 2バイト パーティションのテーブルまたは結合インデックスで、組み合わせパーティションの最大数にまだ達していない場合、第1レベルのパーティションの最大数は、組み合わせパーティションの最大数が65,535を超えない範囲での最大値に増えます。

    明示的なADD句が付いているレベルが少なくとも1つある場合や、BIGINTデータ型のRANGE_N関数だけで構成されているレベルが少なくとも1つある場合、あるいは列パーティションがある場合は、他のそれぞれのレベル(第2レベルから最終レベルまで)でこの処理が繰り返されます。

  • パーティション式がRANGE_N関数だけで構成されていない場合に、INTEGERまたはBIGINTのいずれかのデータ型になっていなければ、そのパーティション式は、INTEGERデータ型にキャストするように書き換えられます。INTEGERまたはBIGINTのいずれかのデータ型にキャストできない場合、システムはリクエスト側にエラーを返します。
  • 行パーティション レベルで定義するパーティションの数は、そのレベルの行パーティションを定義するために使用するRANGE_N関数またはCASE_N関数で指定する行パーティションの数になります。ただし、そのレベルがRANGE_N関数またはCASE_N関数に基づかない場合は、65,535になります。

RANGE_N関数

新しいパーティション式がRANGE_N関数のみで構成されている場合は、次の条件が適用されます。

  • 定義する範囲の数は、2バイト パーティションの場合は65,535以下、8バイト パーティションの場合は9,223,372,036,854,775,807以下でなければなりません。そうでない場合、システムはリクエスト側にエラーを返します。

    単一レベル パーティションで、NO RANGEとUNKNOWNの両方のパーティションを指定する場合、そのようなパーティション式で定義するパーティションの合計数は、2バイト パーティションの場合は65,535以下、8バイト パーティションの場合は9,223,372,036,854,775,807以下でなければなりません。

    データ型がINTEGERのRANGE_N関数の場合、定義するパーティション数は65,535以下でなければなりません。この数を超えるパーティションを定義すると、システムはリクエスト元にエラーを返します。

    データ型がBIGINTのRANGE_N関数の場合、定義するパーティション数は9,223,372,036,854,775,807以下でなければなりません。この数を超えるパーティションを定義すると、システムはリクエスト元にエラーを返します。

  • 以下の条件がすべて満たされれば、範囲は前の範囲と組み合わされます。
    • 前の範囲が、*で始まる範囲で指定されていない。
    • 前の範囲が、EACH範囲のサイズ倍数になっている(EACHが指定されている場合)。つまり、最後に拡張した範囲が、EACH句で指定されたもの以上である。
    • 前の範囲の最後が、この範囲の始まりの直前になっている。タイムスタンプ範囲の終了値として59.999999秒(テスト値の精度で切り捨て)~61.999999秒(テスト値の精度で切り捨て)の範囲のいずれかの値が指定された場合、次の1分が始まる直前のものと見なされます。
    • (うるう秒は考えない)範囲のサイズ(またはEACHが指定された場合はEACHの範囲サイズ)が両方の範囲と同じである。

      組み合わせ範囲に1つのEACH句があり、これが前の範囲のEACH句と同じか、前の範囲にEACH句がない場合には、組み合わせ範囲のEACH句の範囲サイズは前の範囲のサイズと同じになります。

  • 単一レベル パーティションのパーティション式をINTEGERデータ型のRANGE_N関数だけで定義する場合、定義するパーティションの合計数は2,147,483,647以下でなければなりません。

    パーティションの数が2,147,483,647を超える場合、システムはリクエスト側にエラーを返します。

    2バイトの単一レベル パーティションの場合、RANGE_N関数で定義する範囲パーティションの数は65,533以下にする必要があります。そうでない場合は、パーティションは8バイト パーティションになります。

    2バイトのシングルレベル パーティションの場合に、NO RANGEとUNKNOWNの両方のパーティションも指定すると、定義できるパーティションの最大合計数は65,535になります。

  • パーティション式をBIGINTデータ型のRANGE_N関数だけで定義する場合、定義する範囲の数は9,223,372,036,854,775,805以下でなければなりません。

    範囲の数が9,223,372,036,854,775,805を超える場合、システムはリクエスト側にエラーを返します。

    シングルレベル パーティションの場合に、NO RANGEとUNKNOWNの両方のパーティションも指定すると、そのようなパーティション式で定義できるパーティションの最大合計数は9,223,372,036,854,775,807になります。

CASE_N関数

パーティション式がCASE_N関数のみで構成されている場合は、次の条件が適用されます。

  • 定義するパーティションの数は2,147,483,647以下でなければなりません。CASE_N関数にはINTEGERデータ型が含まれ、2,147,483,647はINTEGERの指定可能な最大値であるため、この数を超えるパーティションを定義すると、システムはリクエスト元にエラーを返します。
  • 定義するパーティションの数は2,147,483,647以下でなければなりません。CASE_N関数から返される値はINTEGERデータ型だからです。

    パーティションの数が2,147,483,647を超える場合、システムはリクエスト側にエラーを返します。