多次元ARRAYおよびVARRAYデータ型に関するルールと制限 - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
17.00
Published
2020年6月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/jpx1556733107962.ditamap
dita:ditavalPath
ja-JP/jpx1556733107962.ditaval
dita:id
B035-1184
Product Category
Software
Teradata Vantage

多次元ARRAYとは、整数座標から要素タイプへのマッピングのことです。多次元ARRAYは、その各次元の下限および上限のペアで記述されます。

CREATE TYPE (ARRAY形式)リクエストを使用して、アプリケーションに必要なそれぞれの多次元ARRAY/VARRAY型を作成する必要があります。新しい多次元ARRAY/VARRAY型を作成する場合、明示的に各次元の下限および上限および配列の要素データ型を指定する必要があります。要素データ型は、既存のTeradata SQL型である必要があります。多次元ARRAY/VARRAY型が作成されると、その他のTeradata SQLデータ型とほとんど同じ方法でそれを使用することができます。

以下のグラフィックは、多次元ARRAY/VARRAYデータ型の構成要素を示しています。



多次元ARRAY/VARRAY型は、値の可変長リスト(順序付き)として定義されています。各次元の値の最大数は、型作成時に指定します。数値インデックス値を使用して多次元ARRAY/VARRAY型の各要素値にアクセスできます。詳細については、<Teradata Vantage™ - データ タイプおよびリテラル、B035-1143>を参照してください。

Teradata Databaseは、以下の例外を除き、UDTおよびPERIODデータ型を含む、多次元ARRAY/VARRAYデータ型の要素タイプのすべてのTeradataデータ型をサポートします。
  • BLOB
  • CLOB
  • LOB UDT(DISTINCT型とSTRUCTURED型の両方)
  • 地理空間
以下のパラメータ データ型は、多次元ARRAY/VARRAY型の要素タイプとしてサポートされていません。
  • VARIANT_TYPE
  • TD_ANYTYPE

多次元ARRAY/VARRAY型は、テーブル列あるいはUDF、メソッド、外部ストアド プロシージャ、またはSQLストアド プロシージャへのパラメータに指定できます。多次元ARRAY/VARRAY型を使用して、SQLストアド プロシージャ内部のローカル変数を宣言することもできます。Teradata Databaseは、拡張ANSIスタイルのDML構文をサポートして、多次元ARRAY/VARRAY値の個々の構成要素にアクセスして操作できるようにします。

以下のルールと制限は、多次元ARRAYおよびVARRAYデータ型の作成および使用に適用されます。
  • 名前にマルチバイト文字を含むオブジェクトがデータベースのUDFライブラリにある場合、新規オブジェクト名に1バイト文字のみが含まれる場合でも、シングルバイトのセッション文字セットを使用して、新たなUDF、UDT、メソッド、またはJavaストアド プロシージャのオブジェクトを作成することはできません。作成しようとすると、システムはリクエスト側にエラーを返します。代わりにマルチバイトのセッション文字セットを使用します。
  • STRUCTURED型UDTおよびDISTINCT型UDTと同様に、データベースはデフォルトで、SYSUDTLIBデータベースで作成されるすべてのARRAY型を、自動生成されたコンストラクタUDFと一緒に保管します。

    このため、ARRAY型またはVARRAY型を作成するには、SYSUDTLIBに対する適切なUDT権限を持っている必要があります。これは、ARRAYまたはVARRAY UDTを作成する場合に、SYSUDTLIBに対するUDTTYPE権限またはUDTMETHOD権限の任意のを持っている必要があることを意味します。

  • オプションのDEFAULT NULL句を使用して、型の作成時に、多次元ARRAY/VARRAY型のすべての要素をnullに初期化することができます。

    この句は特に、多次元ARRAY/VARRAY型で完全にデータが挿入されることが予想される場合に役立ちます。

    これを実行すると、多次元ARRAYの平均、更新、またはカウントなどのすべてのサブセット操作は、アボートおよびエラーを返すことができなくなります。それは、これらの操作が初期化されていない要素を参照するためです。

  • 多次元ARRAY/VARRAY型の配列境界を指定する2つの方法があります。これら2つのメソッドを組み合わせて、多次元ARRAY/VARRAY型の次元を指定することができます。

    使用する指定メソッドにかかわらず、多次元ARRAYの指定されたドメインの外部にある要素にアクセスしようとすると、リクエスト側にエラーが返されます。

    多次元ARRAY/VARRAY型の配列境界を指定する2つの方法は以下のとおりです。
    • 次元ごとに下限および上限を明示的に指定し、それらをコロンで区切る。

      下限は上限以下でなければなりません。

      これらの境界は符号付き整数です。つまり、この形式を使用して負の数値を指定することができます。上限および下限は、32ビットの整数値として内部的に保管されます。このため、下限および上限で使用可能な数値の範囲は、整数値で使用可能な最大範囲である-2147483648から2147483647に対応しています。

      配列の合計サイズが64K - x以下でなければならないということを理解した上で、この範囲の値を使用できます(xは、配列の個々の構成要素への直接アクセスや、ARRAY/VARRAYの自動生成変換文字列を表示するためのオーバーヘッドを可能にするために、ARRAY/VARRAY型の行内ストレージに必要な追加のバイト数)。配列のサイズは、要素の数だけでなく、配列の要素タイプにも影響されます。

    • ANSIスタイルの構文を使用して次元の最大サイズを指定するための単一の符号無し整数値を指定する。

      ANSIスタイル構文は、配列の下限を暗黙的に1と定義します。

  • 多次元ARRAY/VARRAY型として作成された型の最大サイズ、およびその自動生成されたデータ変換列は64 KB以下でなければなりません。これは、データベースがそのデータを行内に格納し、その自動生成されたデータ変換列の最大サイズが、VARCHAR型の最大サイズである64,000 Teradata Latinバイトに制限されるためです。

    多次元ARRAY/VARRAY型として定義できるテーブル列の数に対する制限はありませんが、テーブルには通常、多次元ARRAY/VARRAY型で指定された複数の列が含まれないことが期待されています。さらに、NoPIテーブルとして定義されていない限り、テーブルには他の列が含まれ、一部の列にはより小さいデータ型が含まれる場合があります。

    さらに、各行の行ヘッダーは追加のバイト セットを消費するため、多次元ARRAY/VARRAY型の最大サイズが最大行サイズの約70%を超える可能性は低くなります。多次元ARRAY/VARRAY型の作成者に最大限の自由度を提供するため、データベースが適用する唯一のサイズ制限は行サイズ制限です。

    例えば、整数型2次元ARRAYであるAの次元1と次元2のカーディナリティがそれぞれmnの場合、A[m][n]は(16,384 - x)要素(1 ≤ m*n ≤ (16,384-x))以下でなければなりません(xは、配列の個々の要素への直接アクセスや、ARRAY用の自動生成データ変換文字列を表示するためのオーバーヘッドを可能にするために、ARRAY型の行内ストレージに必要な余分のバイト数を表わします)。

    配列の範囲内で宣言できる次元の最大数には制限があります。作成できる次元の最小数は2であり、作成できる次元の最大数は5です。

  • 多次元ARRAY型のCREATE TYPEリクエストの際に、データ ディクショナリに対して以下のアクションが実行されます。CREATE TYPEリクエストで通常実行されるディクショナリ更新に加えて、リストされている以下のアクションがあります。
    • CREATE TYPEリクエストのDBC.UDTInfoにすでに挿入されている行は、列DBC.UDTInfo.ArrayNumDimensionsおよびDBC.UDTInfo.ArrayScopeにも値を取り入れます。

      多次元ARRAY型用にこの行に挿入される値の詳細については、<Teradata Vantage™ - データ ディクショナリ、B035-1092>を参照してください。

    • 多次元ARRAY型に指定された要素タイプに関する情報を記録するために、DBC.TVFieldsに1行が挿入されます。要素タイプのフィールド名は、フィールドIDが1025の、事前定義された値_ARRAYELEMENTとして記録されます。多次元ARRAY型に指定された要素タイプがUDTである場合、UDT要素タイプとそのTypeIDの名前も記録されます。

      多次元ARRAY型用にこの行に挿入される値の詳細については、<Teradata Vantage™ - データ ディクショナリ、B035-1092>を参照してください。