アップサートの例 - Parallel Data Pump

Teradata® Parallel Data Pumpリファレンス

Product
Parallel Data Pump
Release Number
17.10
Published
2021年6月
Language
日本語
Last Update
2021-09-23
dita:mapPath
ja-JP/oqw1608578437373.ditamap
dita:ditavalPath
ja-JP/oqw1608578437373.ditaval
dita:id
B035-3021
Product Category
Teradata Tools and Utilities

次の例では、それぞれのレコードに、Employeeテーブルの行の基本索引列(EmpNo)の値が含まれています。そのEmployeeテーブルのPhoneNo列に、Foneフィールドから新しい電話番号が割り当てられることになります。

UPDATEが失敗すると、INSERT文が始動し、Teradata TPumpはUPSERTモードになります。この例では、各レコードに、Employeeテーブルに挿入するべき一連の行の基本索引の値(EmpNum)が入っています。Employeeテーブルは、EmpNoとPhoneNoという列で構成されています。

.BEGINLOAD SESSION number;
.LAYOUT Layoutname;
.FIELD EmpNum 1 INTEGER;
.FIELD Fone * (CHAR (10));
.DML LABEL DMLlabelname
DO INSERT FOR MISSING UPDATE ROWS;
UPDATE Employee SET PhoneNo = :Fone WHERE EmpNo = :EmpNum;
INSERT Employee (EmpNo, PhoneNo) VALUES (:EmpNum, :Fone);
.IMPORT INFILE Infilename LAYOUT Layoutname APPLY DMLlabelname;
.END LOAD;

DMLコマンド(およびそのラベル)の有効範囲は、DMLコマンドの直後に置かれた任意の種類のコマンドか、DML文を含むファイルの終わりのうち、どちらか最初に登場した方で終了します。

SQLのEXECUTEコマンドは、BEGIN LOADコマンドとEND LOADコマンドの間に配置する必要があります。

IMPORTタスクの場合、1つのDMLコマンドに最大で7種類のエラー処理オプションを指定できます。例:

.DML LABEL COMPLEX
IGNORE DUPLICATE INSERT ROWS
MARK   DUPLICATE UPDATE ROWS
IGNORE MISSING UPDATE ROWS
MARK   MISSING DELETE ROWS
DO INSERT FOR MISSING UPDATE ROWS;

更新する行のうち欠落しているものについては、マークしてINSERTとして処理すること、あるいはこの例のように、無視してINSERTとして処理することのどちらも有効です。

Teradata TPumpが以下のいずれかの状況を検出すると、
  • IMPORTタスクにDMLコマンドがない
  • IMPORTタスクにおいて、DMLコマンドの範囲外にDML文がある
  • IMPORTタスクに、DML文のないDMLコマンドがある

システムの基本出力先に診断メッセージが書き込まれ、Teradata TPumpタスクが終了し、従来の非ゼロ戻りコードを伴なってTeradata TPumpのメイン制御モジュールに戻ります。その場合は、エラーを訂正してから、Teradata TPumpタスクを再実行依頼できます。

DMLコマンド(とその後のDML文)は、適切なBEGIN LOADコマンドと、そのDMLコマンドを参照するIMPORTコマンドとの間に置く必要があります。END LOADコマンドが検出されると、DMLコマンドとDML文のシーケンスは破棄されます。DMLコマンドを複数のBEGIN LOAD文で共有することはできません。DML文については、この後のセクションで説明します。

1つのTeradata TPumpタスクで使用できるDMLコマンドの最大数は128です。データベースに送られるDMLコマンドおよび文の数が多すぎる場合、1つのTeradata TPumpジョブに対するDMLステップが多すぎることを示すエラー メッセージが記録されます。