前のセクションの2つ目と3つ目の例が示すように、Teradata PTはテーブルの列記述から生成するTeradata PTスキーマの代用としてデータベース テーブルの名前を受け入れます。 これらの生成されたスキーマには、キーボード入力にかかる時間やキーストロークのミスを減らし、この結果ジョブ スクリプトの記述を簡易化する効果があります。このため、スキーマ列が多い場合には非常に便利です。
データベース テーブルからTeradata PT DEFINE SCHEMA文を生成する場合、Teradata PTはデータベースにHELP TABLE呼び出しを行なってテーブルの列の記述を取得し、このテーブル名を介してスキーマを指定するテンプレート オペレータのすべてのスクリプトの呼び出しについて、生成したスキーマ名を使用してDEFINE SCHEMA文を構成します。 その後、同じスキーマを共有するこのテンプレートへのすべての参照のために、Teradata PTはスクリプトにインポートするプロデューサ テンプレート定義のコピーで、生成された名前を使用します。
例1
ここでは、データベース テーブルInvoice_Countsに、4つの整数型が含まれる4つの列があると想定します。 Teradata PTによって構成されたそのDEFINE SCHEMA文は次のとおりです。
DEFINE SCHEMA $SCHEMA_GEN_TBL001 DESCRIPTION 'SOURCE INFORMATION SCHEMA' ( "IC1" BYTEINT, "IC2" SMALLINT, "IC4" INTEGER, "IC8" BIGINT );
テーブル名'Invoice_Counts'を介してスキーマを指定したスクリプトにインポートされたプロデューサ テンプレートのコピーの場合、
SCHEMA $SCHEMA_GEN_TBL001
これがスキーマの指定です。 生成されるシーケンス名には、シーケンス番号(この例では'001')が含まれます。この番号はジョブ スクリプトが生成するスキーマの番号を列挙した番号です。 生成されたスキーマの列名は、Teradata PTの予約語と競合するのを避けるために二重引用符で囲まれます。
もし、上記でスキーマを生成したデータベース テーブルInvoice_Countsの例が区切り形式データ ファイル ソースのターゲット テーブルとなる場合、ジョブ スクリプトに区切り記号付きファイル形式バージョンのスキーマが必要となります。このスキーマは、上記の3つ目のプロデューサ テンプレート参照例に示されているように、DELIMITEDキーワードによって要求できます。コードは次のようになります。
... FROM OPERATOR( $FILE_READER( DELIMITED 'Invoice_Counts' ) ) ...
この場合、データベースのターゲット テーブルでターゲット列がどのように定義されているかに関係なく、プロデューサ用に生成されるスキーマの列はすべて、データの文字形式と同じVARCHAR型とします。(データベースは、ロード時にVARCHARから非文字データ型の表現への必要なデータ変換を実行します。)上記の例のようにDELIMITEDキーワードが存在する場合、Teradata PTはテーブルInvoice_Countsのために、次の区切り記号付きファイル形式のバージョンのスキーマを生成します。
DEFINE SCHEMA $SCHEMA_GEN_D_TBL003 DESCRIPTION 'SOURCE INFORMATION SCHEMA' ( "IC1" VARCHAR(4), "IC2" VARCHAR(6), "IC4" VARCHAR(11), "IC8" VARCHAR(20) );
生成されたスキーマの名前には"_D"が追加されていることに注意してください。これは、ジョブ スクリプトがスキーマの両方のバージョンを必要とする場合に、区切り記号付きではないバージョンのスキーマの名前と区別するためです。
例2
次の2つのDEFINE SCHEMA文で示すように、Teradata PTはスクリプト コンテキストを1つ追加してデータベース テーブルからスキーマを生成します。
DEFINE SCHEMA TODAYS_TRANSACTIONS FROM TABLE 'Daily_Trans'; DEFINE SCHEMA INVOICE_COUNTS FROM TABLE DELIMITED 'Invoice_Counts';
Teradata PTは、指定されたデータベース テーブルの列記述に基づいてDEFINE SCHEMA文を生成し、スクリプトで、省略された元のDEFINE SCHEMA文の代わりに使用します。
プロデューサ テンプレート参照から生成されたスキーマとの唯一の違いは、生成されたスキーマは、生成された名前ではなく元のDEFINE SCHEMA文で提供された名前を持つということです。 上記2つの例ではそれぞれ、TODAYS_TRANSACTIONSとINVOICE_COUNTSがそうです。 データベース テーブルで定義されるスキーマと、完全に記述されたDEFINE SCHEMA文によって定義されるスキーマの間に、機能上の違いはありません。