Teradata TPumpでは、Teradata TPumpジョブ スクリプトを実行するたびに新しいマクロを作成したり削除したりする必要がないため、事前定義マクロを使用すると時間が節約できます。
- Teradata TPumpは、マクロのパラメータ リストが、スクリプトのLAYOUTによって指定されたFIELDリストと一致することを想定しています。FILLERフィールドは無視されます。DML文でUSE句が使用されている場合、Teradata TPumpは、DML文内のすべてのマクロのパラメータ リストが、USE句で指定されたフィールド リストと一致することを前提とします。順序は、LAYOUT内のフィールドと同じでなければなりません。
- このマクロでは、 このマクロでは、INSERT、UPDATE、DELETE、またはUPSERTのうちの1つの基本索引操作を指定します。 サポートされている文がマクロに複数含まれている場合、Teradata TPumpによってエラーが通知されます。
- Teradata TPumpがサポートしているINSERT、UPDATE、DELETE、およびUPSERT文についての制限事項については、このドキュメントの該当するセクションで説明されています。
EXECUTE文が、ジョブ スクリプト内のINSERT、UPDATE、DELETE、またはUPSERT文を置き換える場合、EXECUTE文は、置き換えるINSERT、UPDATE、DELETE、またはUPSERT文と同じ場所に置かれている必要があります。次に、INSERT文を等価の事前定義マクロに置き換える場合の例を示します。
.DML LABEL LABELA; DELETE <delete-operands> ; INSERT <insert-operands> ; UPDATE <update-operands> ; .DML LABEL LABELA ; DELETE <delete-operands> ; EXECUTE <insert-macro-name> INSERT ; UPDATE <update-operands> ;
- CREATE MACRO <名前> (<パラメータ リスト>) as (UPDATE....; );
- CREATE MACRO <名前> (<パラメータ リスト>) as (INSERT.....; );
- CREATE MACRO <名前> (<パラメータ リスト>) as (DELETE.....; ) ;
- CREATE MACRO <名前> (<パラメータ リスト>) as (UPSERT.....; ) ;
- Teradata TPumpが、(UPDATE/INSERTマクロのペアの代わりに)1つのUPSERTマクロを定義する際に、Atomic UPSERT構文の使用を試みます。
- UPSERTマクロが正しく定義されれば、Teradata TPumpはUPSERTでAtomic upsert機能を使用します。
- UPSERTマクロの定義の際にデータベースのAtomic UPSERTの制約などが原因でエラーが発生した場合、Teradata TPumpは警告を発行し、UPDATE文とINSERT文のペアから成る現在のTeradata TPump UPSERTメソッドに戻します。
UPSERTの代用としての既存のTeradata TPump構文が検出されると、Teradata TPumpは今までどおりの処理を続け、事前定義マクロへの参照をUPDATEまたはINSERT、あるいはその両方に使用します。
例:
.DML LABEL <dml-label-name> DO INSERT FOR MISSING UPDATE ROWS ... ; EXECUTE <update-macro-name> UPDATE ; INSERT <insert-operands> ; .DML LABEL <dml-label-name> DO INSERT FOR MISSING UPDATE ROWS ... ; UPDATE <update-operands> ; EXECUTE <insert-macro-name> INSERT ; .DML LABEL <dml-label-name> DO INSERT FOR MISSING UPDATE ROWS ... ; EXECUTE <update-macro-name> UPDATE ; EXECUTE <insert-macro-name> INSERT ;
Atomic UPSERTを利用した事前定義マクロを使用できるように、Teradata TPumpコマンド構文ではUPSERTマクロがサポートされています。
.DML LABEL <dml-label>; EXECUTE <upsert-macro-name> UPSERT ;
Atomic UPSERTに事前定義マクロを使用すると、DML文のデフォルトのオプションは「Ignore Missing Update Rows(欠落している更新行を無視)」になります。
Atomic UPSERT構文は、下位互換性がありません。したがって、データベース サーバーを互換性のあるリリースに更新するまでは使用できません。Atomic UPSERTがデータベースでサポートされれば、Teradata TPumpを実行して標準UPSERTとAtomic UPSERTの両方が混在した処理が可能になります。
データベースでは、Atomic UPSERTがUPDATEに変換された場合はUPDATE、INSERTに変換された場合はINSERTというアクティビティ タイプがそれぞれデータベースによってレポートされるため、Teradata TPumpの統計にレポートされる(そして通知出口ルーチンに渡される)UPSERTは、UPDATEまたはINSERTのどちらかになります。