17.10 - 構文 - MultiLoad

Teradata® MultiLoadリファレンス

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

IMPORTコマンドの構文は、Teradata MultiLoadが実行されているクライアント システムがメインフレーム接続であるか、ワークステーション接続であるかによって異なります。構文の構成要素は、両方の構成で共通のものもあれば、固有なものもあります。

IMPORT構文(メインフレーム接続クライアントシステムの場合)

IMPORT構文(ワークステーション接続クライアントシステムの場合)

次のような場合に当てはまります。

APPLY label
後続のINSERT文、UPDATE文、またはDELETE文に応じて以前のDML LABELコマンドによって指定されるエラー処理オプション。
AXSMOD name
データのインポートに使用するアクセス モジュール ファイル名。これらのアクセス モジュールには以下の項目が含まれます。
  • Teradata Access Module for OLE DB: Windowsプラットフォームではoledb_axsmod.dll
  • Teradata Access Module for Named Pipes:
    • すべてのサポートされているUNIX プラットフォームの場合、np_axsmod.so
    • Windowsプラットフォームの場合、np_axsmod.dll
  • Teradata Access Module for WebSphere MQ (クライアント バージョン):
    • すべてのサポートされているUNIX プラットフォームの場合、libmqsc.so
    • Windowsプラットフォームの場合、libmqsc.dll
  • Teradata Access Module for WebSphere MQ (サーバー バージョン):
    • すべてのサポートされているUNIX プラットフォームの場合、libmqs.so
    • Windowsプラットフォームの場合、libmqs.dll
  • Teradata Access Module for JMS:
    • すべてのサポートされているUNIX プラットフォームの場合、libjmsam.so
    • Windowsプラットフォームの場合、libjmsam.dll
個人共有ライブラリのファイル名は独自のアクセス モジュールが使用できる場合に利用できます。
ワークステーション接続クライアント システムまたはメインフレーム接続クライアント システムでディスク ファイルをインポートしたり、メインフレーム接続クライアント システムで磁気テープ ファイルをインポートしたりする場合には、AXSMODオプションは必要ありません。ワークステーション接続クライアント システム上の磁気テープおよびその他の種類のファイルをインポートする場合は必要です。
'c'
(オプション)入力データ ソースの可変長テキスト レコードでフィールドを区切る区切り記号を指定します。
'c'を指定しない場合のデフォルトは、パイプ記号(|)です。
ジョブ スクリプトの文字セットがジョブに使用されるクライアントの文字セットと異なる場合、Teradata MultiLoadは有効な区切り記号をスクリプトの文字コードからクライアントの文字コードに変換してから、この区切り記号を使用してフィールドを区切ります。
例えば、z/OSでUTF-8クライアント文字セットを使用する場合、ジョブ スクリプトはTeradata EBCDICで記述される必要があります。ワークステーションに接続したシステムでUTF-16クライアント文字セットを使用する場合、ジョブ スクリプトはUTF-8でも構いません。
ネットワークの例:クライアント文字セットがUTF-16、スクリプト文字セットがUTF-8のときに、次のコマンドを指定した場合:
…FORMAT VARTEXT '-'…
Teradata MultiLoadは'-'をUTF-8からUTF-16に変換し、UTF-16形式の'-'に基づいてレコードのフィールドを区切ります。
メインフレームの例:クライアント文字セットがUTF-8、スクリプト文字セットがTeradata EBCDICのときに、次のコマンドを指定した場合:
…FORMAT VARTEXT '6A'xc…
Teradata MultiLoadはTeradata EBCDICに従ってx'6A'を解釈し、これに対応するUnicodeコード ポイント(U+007C "VERTICAL LINE")に変換し、UTF-8のエンコーディング スキームU+007C、0x7C (7ビットASCIIでは'|')をレコードの区切り記号として使用します。
メインフレーム プラットフォームでUTF-8クライアント文字セットを使用する前に、文字セットの定義を確認し、コード ポイントおよびTeradata EBCDICとUnicode文字のマップを判断します。EBCDICのバージョンによっては、ジョブ スクリプト内のどの位置に特殊文字を配置すべきかが異なる場合があります。詳細については、Teradata Vantage™ - Advanced SQL Engine 国際文字セット サポート, B035-1125を参照してください。
例えば、IBM EBCDICコードのほとんどのページで、コード ポイント'|'は'4F'です。スクリプトで区切り記号として'|'を指定するか、またはIBM EBCDICコードの同じ種類のページを使用して、システム環境のデフォルトの区切り記号を残し、UTF-8データの区切り記号としてx'7C' (Unicodeでは'|')が使用される場合、ジョブは次の理由によりエラーになります。
  • Teradata EBCDICのコード ポイントx'4F'は、U+007CではなくU+008Dにマップされる。
  • データに使用されている文字列を区切り文字として使用することはできません。
  • タブ文字以外の制御文字は区切り文字として使用できません。
DISPLAY ERRORS
エラーを起こした入力データ レコードを標準エラー ファイルに書き出すことを指定するオプション キーワード
DISPLAY ERRORS EFILE efilename
[任意選択]エラーを生成する入力データ レコードをユーザー指定のエラー ファイルに書き込むキーワード指定です。ユーザーがエラー ファイル名を指定しない場合のデフォルトのエラー出力先は、標準のエラー ファイルになります。ユーザーがエラー ファイル名を指定しない場合、デフォルトではワークステーション接続プラットフォームの場合は標準のエラー ファイルが、チャネル接続プラットフォームの場合はSYSOUTがエラー指定先となります。
FOR n
レコードm,で開始される処理の対象となるレコードの数(整数)。
FOR nまたはTHRU kを指定しない場合、データ ソース以降、最後に取得したレコードまでTeradata Multiloadによって処理が続行されます。
「FOR 0」が使用されている場合、Teradata MultiLoadはデフォルトでFROMを2に、THRUを1に指定して警告を発します。これにより、Teradata MultiLoadはデータ ファイルの2つめのレコードだけをターゲット表にロードします。
FORMAT…
入力レコードの形式を以下のように指定します。
  • FASTLOAD。各入力レコードは、2バイトの整数nnバイトのデータ、最後にレコード終了記号(X'0A'またはX'0D')です。
  • BINARY。各入力レコードは、2バイトの整数nの後にnバイトのデータが続きます。
  • TEXT。各レコードはクライアント セッション文字セットの任意の文字数で構成され、後に次のいずれかのレコード終了記号が続きます。
    • UNIXプラットフォームでは、改行文字(UnicodeではLINE FEED U+000A)です。
    • Windowsプラットフォームの場合、2文字の連続復帰文字とこれに続く改行(Unicodeでは、それぞれCARRIAGE RETURN U+000DおよびLINE FEED U+000Aとして識別されます)
    UTF16以外のクライアント セッション文字セットの場合、レコード終了記号バイト シーケンスは以下のようになります。
    • UNIXプラットフォームでは、X'0A'です
    • Windowsプラットフォームでは、X'0D0A'です。
    UTF16クライアント セッション文字セット(この文字セットでは、各文字が2バイトでエンコードされます)の場合、レコード終了記号バイト シーケンスは以下のようになります。
    • ビッグ エンディアンのUNIXプラットフォームでは、X'000A'
    • リトル エンディアンのUNIXプラットフォームでは、X'0A00'
    • Windowsプラットフォームでは、X'0D000A00'です。
    TEXT形式を指定するのは、CHAR、ANSIDATEなどの文字データに対してのみにする必要があります。TEXT書式をバイナリ データ(INTEGER、BYTEINT、PERIODなどのバイナリ データ)に指定しないでください。バイナリ データの実際のバイト値によっては、予期しない結果が生じる場合があります。
    TEXTレコード形式の使用時のINDICATORSモードは推奨しません。UNFORMATTEDレコード形式を使用してください。
  • UNFORMAT。各入力レコードは、指定のレイアウトのFIELD、FILLER、およびTABLEの各コマンドで定義されます。
    z/OSでUNFORMAT形式を使用するときは、データ ストリームおよびデータ ソースに、ユーティリティ スクリプトに定義されているレイアウトとの一貫性があることを確認してください。データ ストリームの長さに矛盾があると、データが損傷を受ける可能性があります。
  • VARTEXT。各入力フィールドは、各フィールドが区切り文字で区切られた可変長テキスト レコード形式です。区切り文字の定義は次のとおりです。
    • データに出現する文字は不可
    • TAB以外の制御文字は不可
FORMATオプションが指定されていない場合は、デフォルト書式はFASTLOADです。
FREE
メインフレーム接続クライアント システムでのインポート操作完了時に、ddnameで指定したテープ入力装置の割り当てを解除します。
割り当て解除された入力装置を、同じTeradata MultiLoadタスクまたは同じスクリプト内の別のタスクでオープンしようとすると、未定義のddnameエラーが発生します。
デフォルトでは、装置の割り当ては解除されません
FROM m
確認済みデータ ソースにおいて処理を開始するレコードの論理レコード番号(整数)。
FROM mを指定しないと、データ ソースから受け取った最初のレコードからTeradata MultiLoadによって処理が開始されます。
HOLD
メインフレーム接続クライアント システムでのインポート操作完了時に、ddnameで指定したテープ入力装置の割り当てを解除しないようにします(デフォルト)。HOLDを指定すると、Teradata MultiLoad操作全体が完了した際に装置が解除されます。
INFILE ddname
メインフレーム接続z/OSクライアント システム上の入力レコードが格納された外部データ ソース。z/OSの場合はDDNAMEです。
ddnameを指定すると、Teradata Multiloadにより指定されたソースからデータ レコードが読み取られます。modulenameを指定すると、読み取られたレコードが指定したモジュールにTeradata MultiLoadによって渡されます。
DDNAMEは、外部システムに適用可能な規則に従う必要があります。シーケンシャル(VSAM)データ セットを参照できます。
DDNAMEは、以下の場合を除いて、Teradata SQL列名と同じ構成規則に従う必要があります。
  • 「アット」(@)はアルファベット文字として使用できます。
  • 下線(_)は使用できない。
DDNAMEが磁気テープ上のデータ ソースを表わす場合、テープは、オペレーティング システムのサポート内容によって、ラベル付きとラベルなしのどちらかとなります。
INFILE filename
ワークステーション接続クライアント システム上の入力ファイルのUNIXまたはWindowsの完全なパス名。
パス名に空白文字が埋め込まれている場合は、パス名全体を単一引用符または二重引用符で囲んでください。
INFILE filenameを指定すると、指定したソースからデータがTeradata MultiLoadによって読み取られます。INMOD modulenameを指定すると、読み取られたデータが指定したモジュールにTeradata MultiLoadによって渡されます。
init-string
アクセス モジュール用の任意選択初期設定文字列です。
初期設定文字列には二重引用符を含めることができますが、単一引用符を含めることはできません。
INMOD modulename
  • レコードをTeradata MultiLoadに渡してメインフレーム接続クライアント システムで処理する前に、各レコードを読み取って(任意)、前処理するユーザー出口ルーチン。
  • ワークステーション接続クライアント システム上の、INMOD実行可能コードのUNIXまたはWindows完全パス名。
メインフレーム接続クライアント システムでは、modulename は、以下の点を除いてTeradata SQL列名と同じ構造規則に準拠します。
  • 「アット」(@)はアルファベット文字として使用できます。
  • 下線(_)は使用できない。
modulename指定は、外部システムの適用可能規則に準拠する必要があります。
  • UNIX OSのバージョンによっては、モジュールがカレント ディレクトリにある場合、接頭辞「./」をmodulename指定に追加しなければならないことがあります。
  • Windowsプラットフォームでは、INMODモジュールの出力メッセージがstdoutに出力される場合、INMODが使用する文字セットはMultiLoadが使用する文字セットに依存しないため、stdoutの表示に文字セットを混在することができます。例えば、IMMODはメッセージをASCIIで出力し、MultiLoadはUTF-16で出力できます。
LAYOUT layoutname
直前のLAYOUTコマンドで指定された入力レコードのレイアウト。
NOSTOP
(オプション)可変長テキスト レコードに関連したエラーが原因でTeradata MultiLoadが終了しないようにするキーワード指定。
QUOTE
QUOTEオプションでは、入力データ値の非引用(QUOTE NO)、オプションで引用(QUOTE OPTIONAL)、または常に引用(QUOTE YES)を指定できます。
データ値に任意または常に引用符をつける場合、1つ以上の文字から成る開始/終了囲み引用符を指定できます。デフォルトの引用符は、開始引用符と終了引用符のいずれも(")になります。開始引用符('q')と終了引用符('r')には、異なる引用符を指定できます。 'q'だけを指定した場合、開始引用符と終了引用符のいずれもこの引用符になると推定されます。 開始引用符、終了引用符、またはその両方にアポストロフィが含まれている場合、QUOTE指定ではアポストロフィを二重にする必要があります。
THRU k
確認済みデータ ソースにおいて処理を終了するレコードの論理レコード番号(整数)。
THRU kまたはFOR nを指定しない場合、データ ソース以降、最後に取得したレコードまでTeradata MultiLoadによって処理が続行されます。
TRIM
TRIMオプションでは、トリミングを行なわない、または前後にある埋め込み文字の両方をトリミングするよう要求できます。デフォルトの埋め込み文字は空白(スペース)です。
USING (parms)
対応するユーザー出口ルーチンに渡されるパラメータすべてを列記した文字列。
  • parms文字列には、いくつかの文字列を含めることができます。それぞれの文字列は両端をアポストロフィーまたは引用符で区切ります。
  • parms列の最大サイズは1 KBです。
  • 区切られた文字列またはコメントの中の括弧は、構文上は英字と同じ意味を持ちます。
  • parms列がユーザー出口ルーチンに渡される前に、以下の要素が単一の空白文字でTeradata MultiLoadによって置換されます。
    • 各コメント
    • ブランクやタブなど、区切り記号列の外側に指定されている連続した空白文字
  • parms列は全体を括弧で囲みます。メインフレーム接続クライアント システムでは、この括弧はユーザー出口ルーチンに渡される列に含まれます。
  • ユーザー出口ルーチンが以前のFastLoad INMODの場合、parms列にはFDLINMODを指定します。
WHERE condition
指定されたラベル オプションをレコードに適用してデータベースに送信するかどうかを、後続のINSERT文、UPDATE文、またはDELETE文ごとに決定する条件。
  • condition真=はい
  • 偽のcondition=送らない
condition指定は次を参照できます。
  • 現在アクティブなレイアウトで定義されているフィールドの任意の組み合わせ
  • システム定義およびユーザー定義の定数および変数
  • FIELDコマンドで指定したfieldname1
WHERE conditionを指定しない場合、デフォルトの条件は「真/はい」です。
ジョブ スクリプトの文字セットがジョブに使用されるクライアントの文字セットと異なる場合、Teradata MultiLoadは文字定数および条件で参照されるインポート データを同じ文字セットに変換してから、条件を評価します。
例えば、z/OSでUTF-8クライアント文字セットを使用する場合、ジョブ スクリプトはTeradata EBCDICで記述される必要があります。ワークステーションに接続したシステムでUTF-16クライアント文字セットを使用する場合、ジョブ スクリプトはUTF-8でも構いません。
ネットワークの例:クライアント文字セットがUTF-16、スクリプト文字セットがUTF-8のときに、次のコマンドを指定した場合:
…APPLY lable1 WHERE C1 = 'INSERT';
Teradata MultiLoadはC1フィールドのデータをUTF-8形式に変換し、これをUTF-8形式の'INSERT'と比べて、評価結果を取得します。
メインフレームの例:クライアント文字セットがUTF-8、スクリプト文字セットがTeradata EBCDICのときに、次のコマンドを指定した場合:
…APPLY lable2 WHERE C2 = 'DELETE';
Teradata MultiLoadはC2フィールドのデータをUTF-8形式からTeradata EBCDIC形式に変換し、Teradata EBCDIC形式の'DELETE'と比べて、評価結果を取得します。
メインフレーム プラットフォームでUTF-8クライアント文字セットを使用する前に、文字セットの定義を確認し、コード ポイントおよびTeradata EBCDICとUnicode文字のマップを判断します。EBCDICのバージョンによっては、ジョブ スクリプト内のどの位置に特殊文字を配置すべきかが異なる場合があります。詳細については、Teradata Vantage™ - Advanced SQL Engine 国際文字セット サポート, B035-1125を参照してください。