17.10 - インポート タスク - MultiLoad

Teradata® MultiLoadリファレンス

Product
MultiLoad
Release Number
17.10
Release Date
2021年6月
Content Type
プログラミング リファレンス
Publication ID
B035-2409-061K-JPN
Language
日本語 (日本)

インポート タスクでは、大量のクライアント データが、データベース上の1つ以上の表またはビューにすばやく適用されます。

データベース の再始動/回復操作によってTeradata MultiLoadのインポート タスクが中断された場合は、中断地点から処理が再開されます。中断前に行なわれた処理のロールバックおよび繰返しは行なわれません。これにより、再始動/回復操作時のトランザクション ロールバックによって発生する処理上の不具合が効果的に取り除かれます。

次の表 に、Teradata MultiLoadジョブ スクリプトにインポート タスクをプログラミングする際の考慮事項を示します。

Teradata MultiLoadのインポート タスクの考慮事項
対象 インポート タスクの考慮事項
Archive/Recoveryユーティリティ文 以下の文が含まれます。
  • ROLLBACK
  • ROLLFORWARD
  • RESTORE
  • DUMP
Teradata MultiLoadのターゲット表が関連づけられている場合、データベースでは以下の処理が行なわれます。
  • 操作フェーズや、Teradata MultiLoadがアクティブであるかどうかにかかわらず、ROLLBACK文とROLLFORWARD文が拒否されます。
  • Teradata MultiLoadのロックに関係なく、RESTORE文がすべて実行されます。ただし、Teradata MultiLoadユーティリティ タスクがアプリケーション フェーズでアクティブとなっている場合には、データベースは、アプリケーション フェーズが完了して書き込みロックが解除されるまでRESTORE文は実行されません。
  • DUMP文の処理方法は、Teradata MultiLoadの動作状態によって異なります。

    Teradata MultiLoadがアプリケーション フェーズ中ではない場合、データベースはDUMP文を通常どおりに処理します。

    Teradata MultiLoadがアプリケーション フェーズ中であっても、アクティブではない場合、データベースはDUMP文を処理しますが、フィールド4をクリアした状態で表ヘッダーだけを返します。つまり表は空で復元されます。

    Teradata MultiLoadがアプリケーション フェーズ中であり、アクティブである場合、データベースは、アプリケーション フェーズが終了するまでDUMP文の処理を実行しません。アプリケーション フェーズが正常に終了すると、データベースはDUMPを通常どおり処理します。アプリケーション フェーズが正常に完了する前に中断された場合、データベースはDUMP文を処理し、表ヘッダーだけを返します。

アプリケーション フェーズでは、DUMP文が正常に処理されない場合があります。Teradata MultiLoadジョブを開始する前に、以下の予防策を講じて、ターゲット表を保護してください。

  1. ターゲット表をダンプします。
  2. 関連する永久ジャーナルに対してCHECKPOINT文を実行します。

上記の処理を実行すると、不良データまたは操作上のエラーで表が破損した場合でも、ダンプから表を復元してチェックポイントまで戻します。

列の値の指定 適用可能なインポートされる各レコードと組み合わせて考えるときには、以下のすべての列に対して、列の値を明示して指定する必要があります。
  • 更新および削除のターゲット表の基本索引
  • ターゲット表にパーティション基本索引(PPI)がある場合は、更新および削除のターゲット表のパーティション列
  • 挿入ターゲット表の、デフォルト値(ヌルを含む)が指定されている列以外のすべての列
更新および削除のターゲット表の要件を満たすには、次のいずれかの形式の一連の条件を、AND論理演算子とともに使用します。
  • column_reference =colon_variable_reference
  • column_reference = constant
Teradata MultiLoadでは、OR論理演算子を使用したUPDATE文やDELETE文を処理できません。代わりに、2つの別々のDML文を作成して、それらを条件付きで適用します。
データ ソースの制限 Teradata MultiLoadのインポート タスクで使用するソース データは、すべてクライアント システム上のデータ ソースでなければなりません。データベースの既存の表は使用できません。

また、インポート タスク内の文では、指定されたインポート タスク表以外の、データベースの表または行を参照することもできません。

DROP、および他のDDL文 インポート タスクの実行中、Teradata MultiLoadはDROP以外のDDL文をすべて拒否します。ただし、実際にソース データをターゲット表に適用するアプリケーション フェーズ中は、DROP文の処理と他の文の拒否が両方ともTeradata MultiLoadによって延期されます。アプリケーション フェーズが完了すると、Teradata MultiLoadは待機していたDROP文をすべて処理します。
一般的にDROP文は上記のように扱われます。ただし、Teradata MultiLoadの停止が必要となる場合もあります。それ以外の場合は、Teradata MultiLoadはDROP文を直ちに処理します。
無効なコマンド パラメータ Teradata MultiLoadの削除タスクでは、以下のコマンド パラメータは使用できません。
  • BEGIN MLOADコマンドのCHECKPOINTおよびSESSIONSパラメータは、Teradata MultiLoadの削除タスクには行の配置がないため使用できません。
  • BEGIN MLOADコマンドのERRLIMITパラメータは、Teradata MultiLoadの削除タスクでは制限可能なエラー タイプは認識されないため使用できません。
  • Teradata MultiLoadの削除タスクでは、インポートできるデータ レコードが1件に限られるため、IMPORTコマンドのFORおよびTHRUパラメータは使用できません。
  • インポートされた1件のデータ レコードは、Teradata MultiLoadの削除タスクの1つのによって無条件に適用されるため、DML LABELコマンドと、IMPORTコマンドのAPPLY句は使用できません。
ロック Teradata MultiLoadでは、影響を受けるすべてのターゲット表への同時選択アクセスを可能にするために、インポート タスクの処理中全体に渡ってアクセス ロックが使用されます。
以下の場合、読取りロックまたは書込みロックが必要なDML文を、取得フェーズで同時使用できます。
  • Teradata MultiLoadがクライアント システムからのデータ取得を完了するまで
  • 取得データのソート中

インポート タスクのアプリケーション フェーズおよびクリーンアップ フェーズの間は、選択アクセス以外の同時DML文は使用できません。

複数の操作 各インポート タスクには、複数のINSERT、UPDATE、DELETEの各文を使用でき、クライアント ファイルの1回の受渡しにつき最高5個の表に複数のDML操作を条件付きで適用できます。

クライアント システム ファイルが関連付けられている場合、各DML操作では、ターゲット表、またはターゲット ビューの基となる表の基本索引を構成している、ヌルにできない、またはデフォルトを使用できない列に必ず値を提供する必要があります。

各DML操作で次の処理が実行されます。

  1. クライアント システムからデータベースに、マッチ タグと呼ばれる一意の識別子が付いたモデルDML文が送信されます。
  2. ククライアント データを処理する場合には、IMPORTコマンドのWHERE条件句の指定に基づいて各レコードがTeradata MultiLoadによって評価されます。各条件は、一連のDML操作を示しています。
  3. クライアント レコードが条件を満たしている場合、Teradata MultiLoadはそのレコードを一連のDML操作に対するマッチ タグと組み合わせてデータベースに送信します。
  4. データベースで、モデル文で指定されているDML操作が実行されます。

1つのクライアント レコードが複数の条件を満たす場合、Teradata MultiLoadはそのレコードのコピーを複数作成し、それぞれに別々のマッチ タグを付けてデータベースに送信します。

戻りコード MultiLoadを使用する特別な顧客アプリケーションによっては、いずれかのエラー表(ETまたはUV)の行は必ずしも予想外のものではないため、非ゼロ戻り/終了コードの設定が常に正しい操作になるとは限りません。
サポートされる文 Teradata MultiLoadでは、1つ以上のソースからデータをインポートする場合、以下のDML文を任意に組み合わせて使用できます。
  • INSERT
  • UPDATE
  • DELETE

DML文の各グループの前にはDML LABELコマンドを指定する必要があります。このコマンドによって、ラベルとエラー処理オプションを定義します。

各データ ソースについては次のとおりです。
  • 表の各行に対して、1つ以上のDML文が適用するレコードがある。
  • DML文とLAYOUTコマンドを参照して、データ ソースのレコードをDML文に一致させるIMPORTコマンドによって識別される。

データ ソースのレコードの配置を定義するためには、各LAYOUTコマンドの後に、FIELDコマンド、FILLERコマンドおよびTABLEコマンドの3つのコマンドを続けて指定する必要があります。

ターゲット表 各インポート タスクでは、データベース上のターゲット表に最大5つまでアクセスできます。インポート タスクを実行するためには、各ターゲット表に対する適切なアクセス権限(INSERT、UPDATE、およびDELETEに対する)が必要です。
各ターゲット表については次のとおりです。
  • 以下のことが可能(ただし必須ではない)

    - 空である

    - NUSIがある

  • 固有な副次索引があってはならない
  • プライマリタイムインデックスを持つことはできません

各インポート タスクで同一のターゲット表にアクセスする必要はありません。

Upsert機能 Teradata MultiLoadのUpsert機能は、同一の行にUPDATE文とINSERT文を連続して適用します。

ターゲット表の行が存在しないためにUPDAT文が失敗した場合、Teradata MultiLoadは自動的にINSERT文を実行して、2度ではなく1度の受渡しで操作を完了します。

Update文のWHERE句内のデータ長が無効であったためUpdate文が失敗した場合、このデータ長を修正して、Update文を再実行します。UPDATE文のデータ フィールドの長さが、基本索引列の長さより長い場合、この状態が発生する可能性があります。回避方法として、FILLERを使用するか、データ フィールドの明示的キャストを使用して、基本索引列の長さを一致させます。