17.10 - 使用上の注意 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - データ タイプおよびリテラル

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1143-171K-JPN
Language
日本語 (日本)

UDTのタイプ

Vantageは、DISTINCT型UDTとSTRUCTURED型UDTをサポートします。

UDTタイプ 説明
DISTINCT型 事前定義された単一のデータ型に基づくUDT。INTEGERまたはVARCHARなど。 euro という名前のDISTINCT型UDTがDECIMAL(8,2)データ型に基づいている場合、金額データを格納できます。
STRUCTURED 属性と呼ばれる1つ以上のフィールドの集合。各属性は、事前定義データ型または他のUDT(入れ子がサポートされる)として定義されます。 circleという名前のSTRUCTURED型UDTは、x軸、y軸、および半径属性から構成されます。

UDTは、LOB UDTまたは非LOB UDTとしてさらに分類できます。

呼び出し側 AND … UDTの分類
DISTINCT型 元となる事前定義データ型がCLOBまたはBLOBである LOB UDT.
元となる事前定義データ型がLOBではない 非LOB UDT。
STRUCTURED 少なくとも1つの属性のデータ型がCLOB、BLOB、またはLOB UDTである LOB UDT.
LOBまたはLOB UDTデータ型の属性はない 非LOB UDT。

DISTINCT型UDTおよびSTRUCTURED型UDTに対しする操作を行なうユーザー定義メソッド(UDM)を作成できます。例えば、euroという名前のDISTINCT型UDTに対して、値をUSドルの金額に変換するメソッドを定義できます。同様に、circleという名前のSTRUCTURED型UDTに対して、半径属性を使用して円の面積を算出するメソッドを定義できます。

外部表現

すべてのUDTには、クライアント アプリケーションとサーバー間のインポートおよびエクスポート操作のためにVantageが使用する、対応する事前定義のSQLデータ型があります。特定のUDTにマップする事前定義データ型は、UDTに関連付けられた変換定義で指定されます。

呼び出し側 THEN …
DISTINCT型 Vantageは、UDTを元の事前定義データ型にマップする、インポートおよびエクスポート操作のためのデフォルトの変換定義を自動的に生成します。

例えば、euroという名前のDISTINCT型UDTがDECIMAL(8,2)データ型に基づいているとします。

Vantageが自動生成する変換定義により、クライアント アプリケーションはDECIMAL(8,2)の外部表現を使用してデータをeuro列にロードできます。さらに、クライアント アプリケーションはeuro列に対してクエリーを実行でき、DECIMAL(8,2)と同じ形式で値を受け取ることができます。

STRUCTURED UDTの変換定義はCREATE TRANSFORM文を使用して作成される必要があります。

変換定義は、STRUCTURED型UDTの属性値をインポートおよびエクスポートするためのコンテナとして機能する事前定義SQLデータ型を指定します。

例えば、circleという名前のSTRUCTURED型UDTは、x軸、y軸、および半径属性から構成されます。ぞれぞれの属性のデータ型がFLOATであるとします。

変換定義はBYTE(24)事前定義タイプをcircle UDTにマップして、各FLOAT属性に8バイトを許可します。クライアント アプリケーションはBYTE(24)の外部表現を使用してデータをcircle列にロードできます。同様に、アプリケーションはcircle列でクエリーを実行して、BYTE(24)コンテナの属性値を受け取ることができます。

事前定義SQLデータ型から値を抽出して、対応するUDT属性を設定するインポート操作のロジックは、CREATE TRANSFORM文に指定されるUDFとしてインプリメントされます。同様に、UDT属性値を事前定義SQLデータ型にパックするエクスポート操作のロジックはUDFまたはUDMとしてインプリメントされます。

変換定義の詳細については、<Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>を参照してください。

UDTの外部表現の詳細については、UDTの外部表現を参照してください。

複数の変換グループのサポート

CREATE TRANSFORMまたはREPLACE TRANSFORM文を使用して、各UDTの複数の変換グループを作成できます。また、CREATE TRANSFORMを使用すると、既存の変換グループがすでにあるUDTに変換グループを追加できます。REPLACE TRANSFORMは、UDTに対してすべての既存の変換グループを削除し、UDTに対して新しい変換グループを作成します。また、DROP TRANSFORMを使用してUDTから変換グループを削除することができます。

特定のUDTに許容される変換グループの最大数は16です。

CREATE TRANSFORMまたはREPLACE TRANSFORMを使用して、複合データ型(CDT)の新しい変換を作成することはできません。構造化された固有のユーザー定義型(UDT)に対してのみ、新しい変換を作成できます。

CREATE TRANSFORM文を使用する場合、from-sqlまたはto-sqlのいずれかのみを変換に指定できます。ただし、UDT列を持つテーブルを作成するため、UDTのデフォルトの変換グループは、変換グループにfrom-sqlとto-sqlの両方を関数に含んでいる必要があります。

CREATE PROFILE/MODIFY PROFILEまたはCREATE USER/MODIFY USER文でTRANSFORMオプションを使用して、ユーザーに対して特定のデータ型に使用される変換グループを指定できます。

次のマクロを使用して、UDT (またはCDT)の変換グループ、あるいはユーザー、プロファイル、または現在のセッションの変換グループ設定を検索することができます。

マクロ 説明
SYSUDTLIB.HelpCurrentUserTransforms 現在のログオン ユーザーの変換グループ設定をリストする。
SYSUDTLIB.HelpCurrentSessionTransforms 現在のセッションの変換グループの設定を表示する。
SYSUDTLIB.HelpUserTransforms(User) 特定のユーザーの変換グループ設定をリストする。
SYSUDTLIB.HelpCurrentUDTTransform(UDT)

指定されたUDTに対する現在のセッションの変換グループの設定を表示する。

SYSUDTLIB.HelpUDTTransform(User,UDT) ユーザーのUDTの変換グループをリストする。
SYSUDTLIB.HelpProfileTransforms(Profile) 特定のプロファイルの変換グループ設定をリストする。

SYSUDTLIB.HelpProfileTransform(Profile,UDT)

プロファイルのUDTの変換グループをリストする。

これらのマクロの詳細については、<Teradata Vantage™ - SQLデータ定義言語-構文規則および例、B035-1144>を参照してください。

制限

  • インデックス テーブル、結合インデックス、またはハッシュ インデックスを作成するときに、UDT列にプライマリ インデックスまたはセカンダリ インデックスを宣言することができます。ただし、次のUDTタイプはプライマリ インデックスまたはセカンダリ インデックスのどの形式もサポートしていません。
    • LOB UDT
    • VARIANT_TYPE UDT
  • CLOBおよびBLOBデータ型に適用される制約はLOB UDTにも適用されます。
    • 1つのテーブルで、最大32のCLOB、BLOB、またはLOB UDT列の組み合わせが可能です。
    • キュー テーブルにはCLOB、BLOB、またはLOB UDT列を含めることはできません。
  • 名前に非ASCII文字を使用した既存のUDTがある場合は、名前にLATIN文字を使用した新しいUDTの作成にASCIIセッション文字セットを使用することはできません。代わりに、UTF8またはUTF16セッション文字セットを使用する必要があります。

UDTを処理する関数

パラメータとして、およびC、C++、またはJavaで記述されたUDFのための戻り型としてUDTを指定できます。これには、スカラーと集約UDF、テーブル関数、およびテーブル演算子が含まれます。

UDTは、C、C++、またはJavaで記述されたストアド プロシージャおよび外部ストアド プロシージャのIN、INOUT、OUTパラメータとして指定できます。

FNC関数、Javaクラスおよびメソッドは、UDFまたは外部ストアド プロシージャでUDTパラメータへのアクセスやその値を設定できるように、またはUDTパラメータの情報を取得できるようにするために提供されています。これらの関数およびメソッドの詳細については、<Teradata Vantage™ - SQL外部ルーチン プログラミング、B035-1147>を参照してください。

また、以下が真である場合、順序付き分析関数を除く、ほとんどのSQL関数および演算子でUDTを使用することができます。
  • 関数または演算子が受け入れる事前定義タイプにUDTをキャストする暗黙的なキャスト定義が存在する。
  • DisableUDTImplCastForSysFuncOp DBS Controlフィールドがゼロに設定されている。

SQL関数および演算子とともにUDTを使用する方法については、<Teradata Vantage™ - SQL関数、式、および述部、B035-1145> を参照してください。