Teradata PTでは、スクリプト サイズを減らして、キーストロークのミスをなくすための機能がもう1つサポートされています。 ターゲット テーブルが指定されている場合、またはスクリプトからターゲット テーブルを確実に判断できる場合には、この機能によってSQL INSERT文が生成されます。 例として、スクリプトでSQL INSERT文を次のよう記述します。
$INSERT 'Invoice_Counts'
データベース テーブルInvoice_Countsには4つの列、I1、I2、I4、I8があり、Teradata PTはスクリプトの"$INSERT 'Invoice_Counts'"に、生成された次のSQL INSERT文を代入します。
'INSERT INTO Invoice_Counts VALUES ( :I1, :I2, :I4, :I8);'
ターゲット テーブルを識別するためにユーザーが名前を付けたジョブ変数を使用することも同様にうまく機能します。以下に例を示します。
$INSERT @Insert1
これにより、Teradata PTはジョブ変数'Insert1'の値を、生成されたINSERT文内のデータベース テーブルの名前として使用します。 ジョブ スクリプトでデータベース テーブルのSQL INSERT文が必要な場合、一般にそのデータベース テーブルに含まれる列が多いほど$INSERTマクロが役立ちます。
テーブルを指定する$INSERTマクロを使用すると、次のようなAPPLY文を記述できます。
STEP LOAD_QRTRS ( APPLY CASE WHEN( TRANS_DATE <= '2011-03-31' ) THEN $INSERT 'Q1_Trans' WHEN( TRANS_DATE <= '2011-06-30' ) THEN $INSERT 'Q2_Trans' WHEN( TRANS_DATE <= '2011-09-30' ) THEN $INSERT 'Q3_Trans' ELSE $INSERT 'Q4_Trans' END TO OPERATOR( $LOAD() ) SELECT * FROM OPERATOR( $FILE_READER() ); );
Teradata PTが次の手順でターゲット テーブルを特定できる場合は、どのジョブ ステップにおいても、データベース テーブル指定子を付けずに$INSERTを使用できます。
- 次のジョブ スコープ ジョブ変数
TargetTable
に値が割り当てられている場合、生成されたSQL INSERT文でターゲット テーブルとしてその値が使用されます。
- ジョブ ステップで参照されるConsumerオペレータの'TargetTable'属性が単一のターゲット テーブルを集合的に特定していると、生成されたSQL INSERT文でそのテーブルがターゲット テーブルになります。 $LOADや$UPDATEなどのConsumerオペレータ テンプレートを使用する場合、TargetTable属性は、ジョブ変数ファイルのスクリプト内か、ジョブ ステップ内でConsumerオペレータの属性仕様の一部として、明確に指定する必要があります。指定しない場合、TPTはSQL INSERT文を生成するためにTargetTable属性値を取得することができません。
テーブル指定子のない$INSERTインスタンスのターゲット テーブルが曖昧であるか、またはまったく特定できない場合には、Teradata PTは説明のエラー メッセージを表示し、ジョブを終了します。