16.20 - UDTデータ型 - Teradata Vantage NewSQL Engine

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

prodname
Teradata Database
Teradata Vantage NewSQL Engine
vrm_release
16.20
category
プログラミング リファレンス
featnum
B035-1143-162K-JPN

目的

実世界の実体の構造および動作をモデル化してアプリケーションが使用できるようにするカスタム データ型を表わします。

構文



SYSUDTLIB.
すべてのUDTが作成されるデータベースの名前。
udt_name
CREATE TYPE文によって作成されたUDTの名前。
attribute
適切なデータ型属性。
UDT列では、以下の属性がサポートされます。
  • NULL
  • NOT NULL
  • FORMAT
  • TITLE
  • NAMED
  • DEFAULT NULL
UDTによるデータ型属性の使用に関する詳細は、以下を参照してください。
UDT列は列記憶または列制約属性をサポートしません。

ANSI準拠

UDTは、ANSI SQL:2011に準拠しています。

UDTのタイプ

Teradata Databaseは、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としてさらに分類できます。

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

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

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

Teradata Databaseが自動生成する変換定義により、クライアント アプリケーションは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>の「CREATE TRANSFORM」を参照してください。

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列を持つテーブルを作成するには、SYSUDTLIBデータベースに対するUDTUSAGE、UDTTYPE、またはUDTMETHOD権限、あるいは指定されたUDTに対するUDTUSAGE権限が必要です。

UDT列でクエリーを実行するには、指定されたUDTに対するUDTUSAGE権限が必要です。

制限

  • インデックス テーブル、結合インデックス、またはハッシュ インデックスを作成するときに、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> を参照してください。

UDTのアーカイブと復元

UDTのアーカイブと復元は、データベース全体のアーカイブおよび復元の一環としてのみ実行できます。

ARCHIVE (DUMP)文やRESTORE文を使っても、UDTを個別にアーカイブまたは復元することはできません。データベース オブジェクトのアーカイブおよび復元については、<Teradata® Archive/Recovery Utilityリファレンス、B035-2412>を参照してください。

例: UDTデータ型

以下の文は、euroという名前のDISTINCT型UDTを作成します。

CREATE TYPE euro
AS DECIMAL(8,2)
FINAL;

以下の文はeuroという名前のsales 列を定義するテーブルを作成します。

CREATE TABLE european_sales
  (region INTEGER
  ,sales euro);

例: Java UDFのDISTINCT型UDTパラメータ

CREATE TYPE MONEY AS numeric(10,2) FINAL

REPLACE FUNCTION MyMoney (A1 MONEY)
RETURNS MONEY
LANGUAGE JAVA
NO SQL
PARAMETER STYLE JAVA 
EXTERNAL NAME 'UDF_JAR:UserDefinedFunctions.mymoney';

public static java.math.BigDecimal mymoney(java.math.BigDecimal a)
                                              throws SQLException

または、次のような関数を定義することができます。

REPLACE FUNCTION MyMoney (A1 MONEY)
RETURNS MONEY
LANGUAGE JAVA
NO SQL
PARAMETER STYLE JAVA 
EXTERNAL NAME 'UDF_JAR:UserDefinedFunctions.mymoney(java.math.BigDecimal) returns java.math.BigDecimal';
	
public static java.math.BigDecimal mymoney(java.math.BigDecimal a) 
                                              throws SQLException

例: Java UDFのSTRUCTURED型UDTパラメータ

CREATE TYPE CIRCLE AS (x double, y double, r double)…

REPLACE FUNCTION MyCircle(A1 CIRCLE)
RETURNS INTEGER
LANGUAGE JAVA
NO SQL
PARAMETER STYLE JAVA 
EXTERNAL NAME 'UDF_JAR:UserDefinedFunctions.mycircle';

public static int mycircle(java.sql.Struct s) throws SQLException

または、次のような関数を定義することができます。

REPLACE FUNCTION MyCircle(A1 CIRCLE)
RETURNS INTEGER
LANGUAGE JAVA
NO SQL
PARAMETER STYLE JAVA 
EXTERNAL NAME 'UDF_JAR:UserDefinedFunctions.mycircle(java.sql.Struct) returns int';
	
public static int mycircle(java.sql.Struct s) throws SQLException

例: Java外部ストアド プロシージャのDISTINCT型UDTパラメータ

CREATE TYPE MONEY AS numeric(10,2) FINAL

REPLACE PROCEDURE MyMoney(IN A1 MONEY, OUT A2 MONEY)
LANGUAGE JAVA
NO SQL
PARAMETER STYLE JAVA 
EXTERNAL NAME 'UDF_JAR:UserDefinedFunctions.mymoney';

public static void MyMoney(java.lang.BigDecimal A1, java.lang.BigDecimal[] A2) throws SQLException

例: Java外部ストアド プロシージャのSTRUCTURED型UDTパラメータ

CREATE TYPE CIRCLE AS (x double, y double, r double)

REPLACE PROCEDURE MyCircle(IN A1 CIRCLE, OUT A2 INTEGER)
LANGUAGE JAVA
NO SQL
PARAMETER STYLE JAVA 
EXTERNAL NAME 'UDF_JAR:UserDefinedFunctions.mycircle';

public static void(java.sql.Struct A1, int[] A2) throws SQLException

関連トピック

詳細情報 参照先
UDTをサポートする関数と演算子 Teradata Vantage™ SQL関数、式、および述部、B035-1145.
UDTを処理するUDF、UDM、および外部ストアド プロシージャの機能のインプリメント Teradata Vantage™ SQL外部ルーチン プログラミング、B035-1147.
UDT定義の作成 <Teradata Vantage™ SQLデータ定義言語-構文規則および例、B035-1144>の「CREATE TYPE」
変換定義の作成および削除
  • <Teradata Vantage™ SQLデータ定義言語-構文規則および例、B035-1144>の「CREATE TRANSFORMおよびREPLACE TRANSFORM」
  • <Teradata Vantage™ SQLデータ定義言語-構文規則および例、B035-1144>の「DROP TRANSFORM」
ユーザーへのデフォルト以外の変換グループ設定の指定 <Teradata Vantage™ SQLデータ定義言語-構文規則および例、B035-1144>の「CREATE/MODIFY PROFILE」および「CREATE/MODIFY USER」
キャスト定義の作成 <Teradata Vantage™ SQLデータ定義言語-構文規則および例、B035-1144>の「CREATE CAST」
UDT列を持つテーブルの作成 <Teradata Vantage™ SQLデータ定義言語-構文規則および例、B035-1144>の「CREATE TABLE」
DisableUDTImplCastForSysFuncOp DBS制御フィールド Teradata Vantage™ - データベース ユーティリティ、B035-1102.
UDTのアーカイブ、コピー、および復元 Teradata® Archive/Recovery Utilityリファレンス、B035-2412.