17.10 - 生成されるSQL INSERT文 - Parallel Transporter

Teradata® Parallel Transporter ユーザー ガイド

Product
Parallel Transporter
Release Number
17.10
Release Date
2021年6月
Content Type
ユーザー ガイド
Publication ID
B035-2445-061K-JPN
Language
日本語 (日本)

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は説明のエラー メッセージを表示し、ジョブを終了します。