EXPORT - Basic Teradata Query

Basic Teradata Query リファレンス

Product
Basic Teradata Query
Release Number
16.20
Published
2018年4月
Language
日本語
Last Update
2019-07-11
dita:mapPath
ja-JP/kil1527114222313.ditamap
dita:ditavalPath
ja-JP/kil1527114222313.ditaval
dita:id
B035-2414
Product Category
Teradata Tools and Utilities

目的

この制御によって、ユーザーは、データを返すSQLリクエストから返されるレコードを格納するためにBTEQが使用するエクスポート ファイルの名前、形式、および属性を指定できます。

EXPORTコマンドは、AWSのデータベース コンソール ウィンドウでは実行することはできません。出力ファイルで現在のTPA(trusted parallel application: トラステッド並列アプリケーション)制御ノード上のファイルの位置が指定されており、出力ファイルがこの現在のノード上に存在し、実行されているAWS上にはないためです。

構文

次の図は、メインフレーム接続とワークステーション接続の両方のシステムの構文を示します。





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

AXSMOD
アクセス モジュールを使用してデータをエクスポートすることを示します。 このオプションは、ワークステーション接続システムのDATAおよびINDICDATA型に対してのみ有効です。
エクスポート ファイルがオープンされると、BTEQは、使用されているセッション文字セットに応じて、以下の属性の1つ以上をアクセス モジュールに対して設定します。
  • CHARSET_NAME
  • CHARSET_NUMBER
  • BYTE_ORDER
  • EXPORT_WIDTHS
  • WRITE_BOM
BOM|NOBOM
BOM(バイト オーダー マーク)を新規にエクスポートしたテキスト ファイルの先頭に挿入するかどうかを決定します。 "BOM"を指定すると、UTF-8またはUTF-16バイト オーダー マークが挿入されます。"NOBOM"を指定すると挿入されません。 これは、次の場合に適用されます。
  • UnicodeセッションのREPORTまたはDIFフォーマット ファイルの場合。 エクスポート ファイルがすでに存在し、空でない場合には、このオプションは適用されません。
  • 遅延モードまたは非遅延モードで転送されるLDOテキスト ファイルの場合(DEFERLIMITSオプションおよびDEFERTRANSオプションを参照)。 XMLオブジェクトは常にUTF-8で転送されますが、他の文字をベースとするオブジェクトはセッション文字セットのエンコードで転送されます。 BOMはテキスト ファイルでないので、メイン エクスポート ファイルには適用されません。

デフォルトは"BOM"です。

DATA
問合わせ結果がファイルに送られ、このファイルを他のプログラムで処理できます。

データはレコード モードで返され、FastLoadの形式で出力ファイルに記録されます。 BTEQ、FastLoad、およびFastExport間でデータを交換するためには、この形式を使用します。 MultiLoadもFastLoad形式を受け入れます。

レコード モードの詳細については、RECORDMODEを参照してください。

DATALABELS
DIFファイルの最初のデータ行として、返された各列のタイトルが入れられます。ワークステーション接続システムでは、DATALABELSオプションを使用できません。
ワークステーション接続システムは、エクスポートしたデータにDIF形式を使用している場合TITLEDASHES設定を使用しません。
ddname
後続のデータ返却SQLリクエストから返される結果を格納するためにエクスポート プロセスで使用されるファイルを定義する、z/OS JCLのDD文で使用する名前を指定します。
BTEQ EXPORTコマンドでは、SYSPRINTは有効なDDNAMEではありません。 SYSPRINTファイルへのエクスポートはされません
メインフレーム接続システムの場合、キーワードDDNAMEの代わりにFILEを使用できます。ただし、これはFILEの概念ではなくDDNAMEの概念を表わすので、注意して使用することが必要です。
エクスポート ファイルの名前を定義しなかった場合には、データの出力先のデフォルトのフィールドは、FILE ddnameになります。
メインフレームBTEQに対して指定したddnameが、定義した物理データ セットに関連付けられていない場合、対応するエラー メッセージが出力され、バッチ モードで実行している場合にはBTEQが終了し、対話モードで実行している場合には実行が継続されます。
Unicodeタイプ セッション文字セットを使用する場合、z/OS BTEQはASA紙送り制御文字でサポートされるレコード形式を使用したデータ セットへのREPORT/DIF形式のファイルのエクスポートをサポートしていません。例えば、RECFM=VBA、FA、FBAなどになります。
DEFERLIMITS
潜在的なパフォーマンスの向上として、Teradata Databaseバージョン15.10以降を使用している場合、BTEQは、ラージ データ オブジェクト(LDO)を遅延なしに転送できます。DEFERLIMITSオプションを使用して、BTEQが列の遅延した転送を上書きする方法とタイミングを制御する制限設定を調整できます。最大のパフォーマンスを実現するため最適な制限を指定するのはユーザー次第です。

このオプションは、LDOのエクスポートに遅延転送を使用した場合と非遅延転送を使用した場合の制限を示します。 このオプションには2つの引数があります。 第1引数は各LDOの制限(バイト単位)を定義します。 第2引数は、単一行の非遅延LDOバイトすべての累積制限を定義します。 LDOを非遅延モードで転送するには、両方の制限内にある必要があります。 各制限を超えた場合、LDOは遅延モードで転送されます。 第2引数は第1引数と同等か大きい必要があります。

DEFERLIMITS引数の有効な値は次のようになります。

  • 各LDO = 0..2,097,088,000
  • 累積行 = 0..18,446,744,073,709,551,615

しかしながら、データベースは、どのLDOを遅延モードまたは非遅延モードで転送するかを決定し、それらに対して異なる最大値を課します。

非遅延LDO転送は、"0,0"を使用すると完全にオフにできます。

このオプションが指定されていないが、DEFERTRANSオプションが指定されている場合、DEFERLIMITSには次のデフォルト値が使用されます。

  • 各LDO = 1,000
  • 累積行 = 10,000

非遅延転送の場合、各LDOは1,000バイト以下である必要があります。現在行の非遅延LDO転送(それ自身を含む)すべての合計バイト数は、10,000バイト以下である必要があります。

DEFERTRANS
LDOが遅延転送または非遅延転送でエクスポートされ、それ自身のエクスポート ファイルに格納されることを示します。 メインのエクスポート ファイルにはLDO以外の列のデータに加えて、LDOデータが格納されているファイル名が含まれています。 DEFERLIMITSのデフォルト値が強制されます。 そのため、"1000,10000"制限内のLDOは遅延せずエクスポートされます。 その他のすべては遅延してエクスポートされます。

最大2GBのLDOがサポートされています。

このオプションはINDICDATA形式で使用される場合のみ使用可能です。このオプションやDEFERLIMITSオプションがない場合、LDOは、他のデータすべてといっしょにインラインで転送され、1つのエクスポート ファイル内に格納されます。

DIF
問合わせ結果がDIF形式(Data Interchange Format)。多くのスプレッドシート アプリケーションでデータのインポートおよびエクスポート用に使用されているテキスト形式)に変換されます。 メインフレームBTEQでは、WITH句のサマリー値に下線が引かれています。 ワークステーションBTEQでは下線が引かれていません。
このパラメータは、漢字文字セットKANJISJIS_0SまたはKANJIEUC_0U、および中国語文字セットTCHBIG5_1R0またはSDTCHBIG5_3R0ではサポートされません。
EJECT
エクスポートしたREPORT形式ファイルの最上部にある紙送り制御文字の前に追加ページを生成します。 これは、z/OSで処理タイプがDISP=(OLD,NEW,SHR)の場合のみ機能します。EJECTがデフォルトの設定です。
filename
後続のデータ返却SQLリクエストから返される結果を格納するためにエクスポート プロセスで使用される、ワークステーション接続システムのファイルの名前。

ファイル名の中にカンマ、セミコロン、空白がある場合には、ファイル名全体を単一引用符か二重引用符で囲みます。

ファイル名の大文字と小文字は、UNIXのシステムでは区別されます。Windowsのシステムでは区別されません。

Windows環境でファイル名に続けて他のコマンド オプションを指定する場合には、ファイル名を単一引用符または二重引用符で囲まなければなりません。

ファイル名は、使用している文字セットに関係なく、基本のラテン文字のみで構成されている必要があります。

ワークステーション接続システムの場合、FILEの代わりにDDNAMEを使用できます。ただし、これはDDNAMEの概念ではなくFILEの概念を表わすので、注意して使用することが必要です。
ワークステーションBTEQに対して指定したファイルが存在するが読み取り専用である場合、またはそのパスが存在しない場合には、エラーが発生します。 バッチ モードで実行している場合、BTEQはエラー メッセージの出力後に終了します。 対話モードで実行している場合は、エラー メッセージの出力後に実行が継続されます。
INDICDATA
NULLの値かどうかを示す標識(インディケータ)変数が使用されて、問合わせ結果がファイルに送られます。

データは、標識モードで返され、適切な形式で記録されます。

LARGEDATAMODE設定がONである場合、有効なデータ形式はINDICDATAのみになります。

標識モードの詳細については、INDICATORMODEを参照してください。

エクスポートにINDICDATA形式を指定することは、SET INDICATORMODEまたはSET INDICDATAコマンドを使用することと同じではありません。
'init-string'
エクスポート プロセスの開始時にアクセス モジュールに渡されるオプションの開始文字列に名前を付けます。文字列は単一引用符で囲む必要があります。
LDOPREFIX
LDOのファイル名の作成に使用される接頭辞を指定します。 接頭辞を使用するのは、DEFERTRANSオプションまたはDEFERLIMITSオプションが有効で、複数回のエクスポートにおいて維持される場合のみです。 接頭辞はLDOファイルを識別および構成する場合に役立ちます。特に、複数のLDO列をエクスポートする場合です。

このオプションを使用できるのは、ワークステーション プラットフォームのみです。

LDOSUFFIX
すべてのLDOのファイル名に追加される接尾辞を指定します。 接尾辞を使用するのは、DEFERTRANSオプションまたはDEFERLIMITSオプションが有効で、複数回エクスポートしても維持される場合のみです。

このオプションを使用できるのは、ワークステーション プラットフォームのみです。

modname
アクセス モジュール ライブラリ名。名前に空白文字が含まれている場合は、単一引用符で囲んでください。ライブラリが見つからない場合やロードされているバージョンが正しくない場合は、完全修飾パス名を使用します。
例えば、次のように指定できます。' /opt/teradata/client/xx.xx/lib/np_axsmod.so '
64ビットBTEQを使用している場合は、アクセス モジュールも64ビット モードで作成する必要があります。64ビット モードで作成するために使用するコンパイラ オプションについては、NOTIFYコマンドの説明の「出口モジュールの作成」を参照してください。
n1
BTEQは、指定されたエクスポート ファイルに含まれて返される行の最大数を設定します。

BTEQ RETLIMITコマンドによってもこの値を設定することができるため、最新のLIMIT=n1オプションまたはRETLIMITコマンドよって設定された値が有効となります。

n1の最大値は18、446、744、073、709、551、615です。

デフォルト値はn1=0で、制限がないことを表わします。制限がないことを示すために、アスタリスク(*)を使用することもできます。

(詳細については、RETLIMITおよびRETCANCELを参照してください。)

n2
BTEQは、指定されたエクスポート ファイルに含まれて返される列の最大数を設定します。
n2.に値を入力してから、n1に値を入力する必要があります。

n2の値には、アスタリスクまたは1~65535の数値を使用できます。 *はBTEQが現在サポートしている最大列数を示します。 この値は、Teradata Databaseの今後のリリースをサポートするために変更される可能性があります。 返される列数の制限を固定する場合は、アスタリスクの代わりに数値を入力します。

現行のTeradata Databaseの制限事項については、<SQL基礎、B035-1141>の付録Cを参照してください。

n2のデフォルト値は100です。

列数制限を上げる前に、場合によっては、その他の設定を変更し、設定の結果がその他の列でも有効になるようにする必要があります。 例えば、第3列以外のすべての列を省略する場合は、OMIT ON ALLコマンドを使用してから、列制限を変更します。 列制限を変更した後で、OMIT ON 3コマンドを使用します。 このようにしないと、ON属性は、その他の列で有効になりません。

NOEJECT
エクスポートしたREPORT形式ファイルの最上部で追加の紙送り制御文字を抑制します。 これは、z/OSで処理タイプがDISP=(OLD,NEW,SHR)の場合のみ機能します。 EJECTがデフォルトの設定です。
OPEN
CLOSE
問合わせ時に再試行可能エラーが発生したときのエクスポート ファイルの扱いを決定します。

RETRYコマンド オプションをOFFに設定している場合、BTEQは再試行可能エラーが発生したとき問合わせを再実行しません。 この場合、問合わせ結果は不完全になることがあります。

RETRY値をONに設定してOPENオプションを指定し、再試行可能エラーが発生した場合、BTEQは再度問合わせを開始し、現在開いているエクスポート ファイルの最後に行を追加します。 これは、エラー発生前にエクスポートされていた行と重複することがあります。

RETRY値をONに設定してCLOSEオプションを指定し、再試行可能エラーが発生した場合、BTEQは再度問合わせを開始しますが、まずエクスポート ファイルを閉じ、再び書き込みモードで開きます。 この場合、現在の問合わせがトランザクション内(BTEQはトランザクションを認識しない)であっても以前の問合わせはすべて上書きされます。

OPENがデフォルト設定です。

prefix
各LDOのファイル名の前にLDOPREFIX値が追加されます。 この値にはシンプルな文字列を指定するするか、ディレクトリ名を含めることができますが、すべてのディレクトリ名は既存でなければなりません。 ディレクトリ自体が作成されることはありません。

接頭辞はラテン文字のみで構成する必要があります。 '='記号を使用することもできます。

RECORDLENGTH
現在のエクスポートのレコード(行)サイズの制限を定義します。 これは、エクスポートの期間、RECORDLENGTHコマンドのエクスポート関連の現在の設定を上書きします。

RECORDLENGTHオプションの有効な引数は次のとおりです。

  • MAX64 – レコード サイズを64,768バイトに制限します。DATA/INDICDATAエクスポートの場合は、2バイトのレコード長がエクスポート ファイルに書き込まれます。
  • MAX1MB – レコード サイズを1,024,000バイトに制限します。DATA/INDICDATAエクスポートの場合は、4バイトのレコード長がエクスポート ファイルに書き込まれます。

DATA/INDICDATAエクスポート ファイルには、同じサイズのレコード長を含める必要があります。2バイト長のレコードと4バイト長のレコードの混在はサポートされていません。

このオプションは、REPORT/DIFエクスポートのライン長にのみ影響します。大量のレコードには、適切なWIDTHの設定を使用してください。

エクスポートしたデータを後でインポートする場合は、RECORDLENGTHオプションの設定が一致する必要があります。一致しない場合、インポートは失敗します。

このオプションを指定しない場合、BTEQはRECORDLENGTHコマンドのエクスポート関連の現在の設定から値を取得します。過去にRECORDLENGTHコマンドが実行されていない場合は、デフォルト値のMAX64が使用されます。

SHOW CONTROLS EXPORTコマンドを実行して、現在のエクスポートでRECORDLENGTHの上書きが有効になっているかどうかを確認します。または、SHOW CONTROLS RECORDLENGTHコマンドを実行して親の設定を確認します。

REPORT
指定されたファイルに問合わせ結果が出力されます。 これがデフォルトです。

z/OSでは、エクスポート ファイルの行はデフォルトで253文字に切り捨てられます。幅制限は、WIDTHコマンドを使用して1,048,575文字まで拡大できます。

REPORTWIDEキーワードも利用できます。 このキーワードは、データにREPORT形式を使用する必要があることを指示し、WIDTH設定を32765に変更します。 このキーワードは廃止予定であるため、代わりにSET WIDTHコマンドを使用します。

WIDTHコマンドの項(WIDTH)を参照してください。

RESET
直前のエクスポート状態が無効にされ、標準出力ストリームへの結果の送信が再開されます。エクスポート中にWIDTH設定が変更された場合は、元の値(エクスポート前に有効であった値)にリセットされます。
suffix
LDOSUFFIX値はファイル拡張子とみなされ、その後にピリオド('.')が自動的に追加されます。

接尾辞はラテン文字のみで構成する必要があります。 '='記号を使用することもできます。

使用上の注意

異なるプラットフォーム タイプに対するIMPORTコマンドのソースとして、EXPORTコマンドを使ってエクスポートしたファイルを使う場合、両方のプラットフォームのエンディアン タイプが同じであることを確認してください。 これは、SHOW CONTROLSコマンドの出力結果の「Client Platform Byte Order(クライアント プラットフォームのバイト オーダー)」タブから確認できます。

Teradata Databaseからデータの返信が開始されたときに、BTEQは指定したエクスポート ファイルをオープンします。ユーザーがEXPORTコマンドを使用したときではありません。 また、Teradata DatabaseがSQL文に応答して以下のパーセルのうち1つでも戻した場合にも、BTEQはエクスポート ファイルをオープンします。

  • OK
  • Success
  • Failure
  • Error

    前のIMPORTコマンドですでに開いているファイルを指定することは推奨しません。レコードが同時に読み書きされることにより予期しない結果が生じることがあります。

    Teradata Databaseからエラー パーセルが返された場合には、エクスポート ファイルはオープンされません。
    I/Oエラーおよび異常終了については、I/Oエラーと異常終了を参照してください。

既存のエクスポート ファイルを指定した場合には、すでにあるレコードの後ろに新しいレコードが追加されます。 ただしエラーが発生した場合は、エラーの標準出力ストリームは、ERROROUTコマンドで指定されたファイルに送られます。

エクスポート ファイルの名前には、ユーザーのシステムで有効な任意のデバイス名を使用することができます。データを返すSQLリクエストに対して取り出された各行は、エクスポート ファイルに1つのレコードを生成します。

EXPORTコマンドはTeradata SQLマクロでは使用できません。

エクスポートしたREPORT出力におけるタイトル テキストおよびタイトル ダッシュの抑制

次の例は、エクスポートされるレポートの最上部での列ヘッダーとタイトル ダッシュの生成を抑制する方法を示しています。

.LOGON mydbs/myid, mypwd
CREATE TABLE Employer_Location (EmpNo INTEGER, Location CHAR(5));
INSERT INTO Employer_Location VALUES(1, 'LA');
INSERT INTO Employer_Location VALUES(2, 'NYC');
INSERT INTO Employer_Location VALUES(3, 'ATL');
.SET TITLEDASHES OFF
.EXPORT REPORT FILE=myfile1.exp
SELECT EmpNo (TITLE ''), Location (TITLE '') FROM Employer_Location;
.EXPORT RESET
.SET TITLEDASHES ON
.EXPORT REPORT FILE=myfile2.exp
SELECT EmpNo, Location FROM Employer_Location;
.EXPORT RESET
.LOGOFF
.EXIT

myfile1.expに対する出力:

1  LA
2  NYC
3  ATL

myfile2.expに対する出力:

      EmpNo  Location
-----------  --------
          1  LA
          2  NYC
          3  ATL
TITLEDASHESがOFFに設定され、SELECT文内のすべての列にTITLE ''(タイトル テキストNULL)という句が指定されているファイルmyfile1.expに対して、BTEQはプリントするヘッダー情報がなく、即座にデータのプリントを開始します。
TITLEDASHESがONに設定され、SELECT文内の列にTITLEの句が指定されていないファイルmyfile2.expに対して、BTEQは、列ヘッダーをプリントしてから、データのプリントを開始します。

レコード モードでのデータを返す応答

データがレコード モード(キーワードDATA)か標識モード(キーワードINDICATORMODE)を使用して返される場合には、各行はエクスポート ファイルにレコードとして出力されます。ワークステーション接続システムの場合、各レコードの形式は次のようになります。

  • レコードは長さフィールドで始まる。このフィールドは、2バイトまたは4バイト(エクスポート固有のRECORDLENGTH設定によって決まる)の2進数の符号なし整数である。これは、レコード内のバイト数を表わす(長さフィールドのバイトとレコード終了フィールドのバイトは含まれない)。
  • 2進数で表現されたフィールドが続く。このフィールドには、返された行の列値が、レコード形式または標識形式で入っている。
  • レコードは、レコード終わりインディケータで終わる。このインディケータは、ワークステーションおよびオペレーティング システムに対応する。 例えば、UNIXシステムの場合、インディケータは新しい行になる。 Windowsでは、インディケータは復帰/改行の対で構成される。 すべての場合、レコード終わり文字(複数も可)は、ワークステーションに対応する文字コードで入っている。 例えば、ASCIIワークステーションであればASCIIコードで入っている。

メインフレーム接続システムの場合、各レコードの形式は次のようになります。

レコードは2進数で表現されたフィールドのみから構成される。このフィールドには、選択された行の列値が、レコード形式または標識形式で入っている。 レコードの長さフィールドまたはレコード終了インディケータは含まれません。その情報はz/OSがレコードを格納する方法で固有となるためです。

可変長文字列として扱われる文字定数(レコード モード)

文字定数がSELECT文の項目リストに含まれている場合、その定数は可変長の文字列として扱われます。 レコード モードでは、文字定数の長さを定義する2バイトのフィールドがその定数の接頭語となります。 このため、定数を含むレコードが後でBTEQまたは別のプログラムによってインポートされるときに、レコードが定義される方法が影響を受けます。

固定長の文字列をエクスポートするためには、SQL SELECT文でFORMAT句を使用します。例えば、次のSELECT文のFORMAT句を使用すると、文字定数'First'を固定長30文字の文字列として返すことができます。

SELECT 'First' (FORMAT 'X(30)');

フィールド モードでのデータを返す応答

フィールド モード(キーワードREPORT)を使用して返されるデータの場合、エクスポート ファイルのレポートの各行に出力されるレコードの形式は次のようになります。

  • レコードは、見出し行またはテキストで表現されたフィールドで始まる。この見出し行またはフィールドには、返された行の列値が含まれる。どちらの場合も、情報が、ワークステーションおよびオペレーティング システムに対応する文字コード(ASCIIワークステーションであればASCIIコード)で入っている。
  • レコードは、レコード終わりインディケータで終わる。このインディケータは、ワークステーションおよびオペレーティング システムに対応する。 例えば、UNIXシステムの場合、インディケータは新しい行になる。 Windowsでは、インディケータは復帰/改行の対で構成される。 すべての場合、レコード終わり文字(複数も可)は、ワークステーションに対応する文字コードで入っている。 例えば、ASCIIワークステーションであればASCIIコードで入っている。
    エクスポートされたレコードをPCで編集し、それを再びデータベースにインポートする場合には、復帰文字と改行文字の両方をレコード終わり文字として認識するエディターを使用する必要があります。

エクスポート操作をステージングするとき、レコード モードの使用を示すためにRECORDMODEコマンドを使用する必要はありません。 レコード モードの使用の必要性はEXPORTコマンドの一部として指定されるデータ形式によって決定されます。 (応答モードの現在の設定については、SHOW CONTROLSコマンドで表示させることができます。)

ラージ データ オブジェクト(LDO)のエクスポート

ラージ データ オブジェクト(LDO)は、CLOB、BLOB、XMLおよびJSONのデータ型で構成されます。 LDOは、インライン、遅延転送、非遅延転送のいずれかでデータベースからBTEQにエクスポートできます。 どのように転送されるかは、DEFERTRANSオプションおよびDEFERLIMITSオプションの使用により異なります。

インラインのLDOエクスポートでは、DEFERTRANSオプションおよびDEFERLIMITSオプションは使用できません。 この場合、BTEQはLDOとLDO以外の列を区別しません。 すべてのデータは、1つのパーセルのデータベースから送信され、単一のエクスポート ファイルに格納されます。 インラインLDOのサイズも64Kに制限されます。

遅延モードのLDOは大きくでき(最大2GB)、LDO以外のデータすべてが処理された後にデータベースにより送信されます。

非遅延モードのLDOも最大2GBまで大きくできますが、LDO以外のデータが処理されるのと同じタイミングでデータベースにより送信されます。

遅延および非遅延エクスポートは、LARGEDATAMODE設定がオンになっているとともにINDICDATA形式を使用するときのみ可能です。 LARGEDATAMODEがオンでない場合、BTEQはエクスポートの期間を自動的にオンにします。 逆に、LDOをインポートするとき、遅延および非遅延インポートは、INDICDATA、DATAおよびVARTEXT形式で行なわれます。

遅延および非遅延エクスポートの両方で、LDOは、それ自身のファイルに格納されるので簡単にアクセスできます。 メインのエクスポート ファイル(FILE/DDNAMEオプションで定義)が作成され、列のタイトルを基にした各LDOファイルのファイル名(VARCHARデータ型として)を持つLDO以外のデータを含みます。 メインのエクスポート ファイルはINDICDATA形式になります。 CLOBおよびJSONファイルは、セッション文字セットを基にテキストとして書き込まれます。 XMLファイルは、常にUTF-8のエンコーディングでテキストに書き込まれます。 BLOBファイルは生データで書き込まれます。

経過時間のパフォーマンスにより決まりますが、通常、遅延エクスポートは大きなLDOに最適で、非遅延エクスポートは小さなLDOに最適です。 いくつかのテストおよびチューニングは、LDOを含むレコードをエクスポートする最適な方法を決定するために必要な場合があります。 以下に遅延モードと非遅延モードのエクスポートを指定する方法を記述します。

  • 遅延モードでLDOをすべてエクスポート: DEFERLIMITSオプションを値"0,0"で使用します。
  • 非遅延モードでLDOをすべてエクスポート: DEFERLIMITSオプションを使用します。(すべてのLDOを構成するのに十分高い値を使用) この方法は非常に大きなLDOには推奨しません。
  • いくつかの遅延LDOおよび非遅延LDOをエクスポート:
    • DEFERTRANSオプションを使用します。 これは、デフォルトのDEFERLIMITS値を"1000,10000"にします。 これらの制限内のLDOは遅延なしでエクスポートされます。 その他のすべては遅延してエクスポートされます。
    • DEFERLIMITSオプションを使用して制限を指定します。 これらの制限のLDOは、遅延なしにエクスポートされます。一方残りのものは遅延モードでエクスポートされます。

DEFERLIMITSオプションが指定された場合、BTEQは、各ステートメントに対してエクスポートされた遅延および非遅延LDOの数を表示します。 次のようなメッセージが表示されます。

*** Total LDOs: 48, Non-deferred: 10, Deferred: 38

ワークステーション プラットフォームの場合、各LDOのファイル名はLDO列のタイトルに基づいて作成されます。 ファイル名の構文は次のとおりです。

[prefix]<col-name>_r<rec-nbr>[.suffix]

構文規則:

  • prefix =オプションのLDOPREFIX値。 相対的または絶対的なディレクトリ構造を含めることができます。
  • col-name = LDO列のタイトル。ラテン文字のみで構成する必要があります。
  • rec-nbr =レコード番号。 レコードが見つかるたびに、この値が大きくなります。 新しいEXPORTコマンドを発行すると、レコード番号がリセットされます。
  • suffix =オプションのLDOSUFFIX値。

メインフレームでは、関連付けられたDDNAMEを使用して、LDO列のタイトルに基づいて各LDOのファイル名が作成されます。 ユーザーは必要なすべてのDDNAMEをJCLスクリプト内であらかじめ定義しておく必要があります。 DDNAME名の変換は次のとおりです。

<col-name><rec-nbr>

構文規則:

  • col-name = LDO列のタイトル。ラテン文字のみで構成する必要があります。
  • rec-nbr =レコード番号。 レコードが見つかるたびに、この値が大きくなります。 新しいEXPORTコマンドを発行すると、レコード番号がリセットされます。

DDNAMEは8文字に制限されていて、先頭には文字を指定する必要があるため、取得できるレコードの最大数は9,999,999になります。ただし、z/OS DDNAMEの制限によって最大数は抑制されることがあります。

各LDO列のファイル名/DDNAMEを一意にすることが重要です。 複数のLDO列で名前が競合する場合は、問合わせ内でTITLE句を使用して新しい列名を作成します。 ラテン以外の文字を含む列の場合も、この方法で問題を適切に回避できます。 例えば、メインフレームの場合、次の問合わせでは2つのLDO列名が競合しています(切り捨てた場合)。

SELECT customer_name_clob, customer_image_blob FROM customer_table;

次のように変更すると、修正できます。

SELECT customer_name_clob (TITLE 'CNAME'),
       customer_image_blob (TITLE 'CIMAGE')
       FROM customer_table;

LDOデータは書式設定されないで、そのまま独自ファイルに書き込まれます。 唯一の例外は、Unicodeのバイト オーダー マーク(BOM)が挿入される可能性があることです。 BOMはXMLオブジェクトの先頭に挿入でき、挿入されたXMLオブジェクトは常にUTF-8エンコーディングで転送されます。Unicodeセッション文字セットを使用している場合は、文字ベースのオブジェクトにもBOMを挿入できます。 ユーザーはNOBOMオプションを使用して、BOMの挿入を禁止することができます。

個々のLDOファイルは追加されません。 LDOファイルがすでに存在する場合は、既存データが単に上書きされます。

LDOエクスポートを後でインポートに使用する場合は、SELECTリスト内で最初にLDO列を「並べ替える」必要があります。 これは、DEFERCOLSオプションが使用されている場合のIMPORTコマンドの要件です。

例7、8、および9(EXPORTの例)を調べて、スクリプト内の遅延および非遅延 エクスポートの使用方法を確認してください。

遅延あるいは非遅延LDOを含むエクスポート中に再試行可能なエラーが発生し、RETRYはONに設定したら、LDOファイルの再上書き問題で、BTEQは現在のSQLリクエストを再実行しません。代わりに、BTEQは自動的に終了します。

エクスポート ファイルのクローズ

エクスポート ファイルは、次のオプションのいずれかが使用されたときにクローズされます。

  • 別のエクスポート ファイルまたはRESETオプションが指定されたEXPORTコマンド
  • LOGOFFEXIT、またはQUITコマンド

最後のレコードの書き込みが終了するまでは、メッセージ ファイルはクローズされません。 クローズされる前のメッセージ ファイルを読んだ場合には、最後の数レコードが欠けている可能性があります。 これらのメッセージは、EXPORTLOGOFFEXIT、またはQUITコマンドを実行してファイルがクローズされた場合に表示されます。

z/OSでは、JCLの中でDISP=MODを指定した場合には、CLOSEオプションは機能しません。

EXPORTおよびメインフレーム接続システム

以下の説明は、メインフレーム接続システムにのみ当てはまります。 LRECLが設定されていて、ファイルに設定したブロックサイズ(blocksize)の値が小さすぎた場合には、データは設定値に合わせて切り詰められ、Teradata Databaseから次のエラー メッセージが返されます。

***Increase test file record length and blocksize  to match data.

BTEQは、QSAM互換のすべての形式をサポートしています。 REPORTオプションを使用する場合には、DD文用のDCBに、VA、VBA、FBA、またはFAのRECFMを指定して、改ページを維持する必要があります。

DATAまたはINDICDATAのいずれかのオプションを使用する場合には、DD文用のDCBにどのRECFMでも指定できます。ただし、通常は、RECFM=FBかRECFM=VBが使用されます。

出力オプションが使用されているかどうかに関係なく、RECFMが固定の場合(F、FB、FA、またはFBA)には、LRECLが正確な値(標識ビットがあればそれも含む)でなければなりません。 そのため、特にREPORTオプションを使用する場合やマルチバイト セッション文字セットを使用する場合は、レコード長またはブロックサイズが大きい可変のRECFM(V、VA、VB、またはVBA)を指定します。

例:

(// DCB=(RECFM=VB,BLKSIZE=32760,DSORG=PS)

また、エクスポートのDATA、INDICDATA、REPORTのいずれかの形式を使用する場合は、受信ファイル用のDCBに、最大レコードを収容できる大きさのLRECLとBLKSIZEの値を指定する必要があります。

既存のファイルに対してDISP=MODと指定すれば、そのファイルにレコードを追加することができます。

z/OSの場合、SYSPRINTファイルに書き出すために使用する幅設定は、エクスポート ファイルのLRECL値に一致するように実行中のREPORTまたはDIFエクスポートに合わせて一時的に変更されます。 この動作は、エクスポート ファイルのLRECLが現在のSYSPRINTファイルの幅よりも小さい場合にのみ行なわれます。 また、EXPORT RESETコマンドが実行されると、このWIDTHは元の値にリセットされます。

バックドアのエクスポート

EXPORTコマンドと応答モード コマンド(INDICATORMODE、LARGEDATAMODE、またはRECORDMODE)を組み合わせると、さまざまなタイプのエクスポートを作成できます。 エクスポート ファイルへのデータの書き込み方法は、EXPORTコマンドで指定された形式(DATA、INDICDATA、REPORT、またはDIF)によって決まります。 データベースから返されるデータの形式は、応答モード コマンドによって決まります。

テキスト エクスポート ファイルにエクスポートされる読解可能な16進数形式のレコード モード出力を生成するには、EXPORT形式タイプにREPORTを指定して、RECORDMODEコマンドをオンにします。

テキスト エクスポート ファイルにエクスポートされる読解可能な16進数形式の標識モード出力を生成するには、EXPORT形式タイプにREPORTを指定して、INDICATORMODEコマンドをオンにします。

テキスト エクスポート ファイルにエクスポートされる読解可能な16進数形式のマルチパート標識モード出力を生成するには、EXPORT形式タイプにREPORTを指定して、LARGEDATAMODEコマンドをオンにします。

列のタイトルまたはタイトルダッシュを含まないエクスポート ファイルをフィールド モードで作成するには、EXPORT形式タイプにDATAを指定して、RECORDMODEコマンドをオフにします。z/OSで、データセットがASA紙送り制御文字をサポートしており(FBA/VBAの使用によって示される)、FORMATがOFFに設定されている場合、BTEQでは書き出される内容がレポートではなくテキスト形式のデータとみなされます。そのため、すべてのASA紙送り制御文字にスペースを使用します。

Windowsでは、バックドア エクスポート ファイルに改行文字を含めることができません。BTEQでは、データベースから送信されたとおりにデータが書き込まれるためです。

EXPORTの例

例1 – EXPORT

レコード モードで、ファイルSAVEDATAに割り当てられているデータ セットにSELECT文の結果を送信するためには、次のコマンドを入力します。

.EXPORT DATA FILE=SAVEDATA

例2 – EXPORT

データ セットALLDATAに送られるSELECT文の結果に標識変数を含めるには、次のように入力します。

.EXPORT INDICDATA DDNAME=ALLDATA

例3 – EXPORT

ファイルALLDATAに送られるSQL SELECT文の結果に標識変数を含めるには、次のコマンドを使用します。このエクスポート時に再試行可能なエラーが発生する場合、再度問合わせが開始され(RETRYがONに設定されている場合)、ファイル内の前のデータが上書きされます。

.EXPORT INDICDATA FILE=’ALLDATA’, CLOSE

例4 – EXPORT

次の例は、アクセス モジュール(ライブラリ名はMYMOD)を介してEXPORT.DATというファイルにデータをエクスポートする例を示したものです。 init-stringを使用していないことに注意してください。

.EXPORT DATA FILE = 'EXPORT.DAT' AXSMOD MYMOD

例5 – EXPORT

次の例は、読解可能な標識モード16進数形式でバックドア エクスポート ファイルを生成します。

 CREATE TABLE my_table (
   Col1 INTEGER,
   Col2 VARCHAR(10)
 ) NO PRIMARY INDEX;
 INSERT INTO my_table values (1, 'one');
 INSERT INTO my_table values (2, 'two');
 INSERT INTO my_table values (3, 'three');
 .EXPORT REPORT FILE=HEXDATA
 .INDICATORMODE ON
 SELECT * FROM my_table ORDER BY 1;
 .EXPORT RESET

エクスポート ファイルは次のようになります。

0000  0200 F101 0400 C101  0A00                 *..........*
0000  0001 0000 0003 006F  6E65                 *.......one*
0000  0002 0000 0003 0074  776F                 *.......two*
0000  0003 0000 0005 0074  6872 6565            *.......three*

例6 – EXPORT

次の例では、列データのみを含むバックドア エクスポート ファイルをフィールド モードで生成します(列タイトルやタイトルダッシュは含めない)。 この前の例と同じテーブルを使用します。

.EXPORT DATA FILE=DATAONLY
.RECORDMODE OFF
SELECT * FROM my_table ORDER BY 1;
.EXPORT RESET

エクスポート ファイルは次のようになります。

1  one
2  two
3  three

例7 – EXPORT

z/OSから遅延モードまたは非遅延モードでLDOを転送するには、返される列と一致するようにDDNAMEを定義しておく必要があります。 この例では、問合わせによって2行、2列が返されます。 BTEQはメインのエクスポート データ セットを1つ、個々のLDOデータ セットを4つ生成します。 2,000バイト以下のLDOは、遅延なしにエクスポートされます。その他すべては遅延モードでエクスポートされます。

//BTEQ   EXEC PGM=BTQMAIN
//EXPFILE  DD  DSN=USERID.BTEQ.EXP1,DISP=SHR
//MYCLOB1  DD  DSN=USERID.BTEQ.COL11,DISP=SHR
//MYCLOB2  DD  DSN=USERID.BTEQ.COL12,DISP=SHR
//MYBLOB1  DD  DSN=USERID.BTEQ.COL21,DISP=SHR
//MYBLOB2  DD  DSN=USERID.BTEQ.COL22,DISP=SHR
//SYSPRINT DD  DSN=USERID.BTEQ.OUTPUT,DISP=MOD
//SYSABEND DD  SYSOUT=*
//SYSOUT   DD  SYSOUT=*
//SYSTERM  DD  SYSOUT=*
//SYSIN    DD  DATA,DLM=##
.LOGON xxx/yyy,zzz
.LARGEDATAMODE ON
.EXPORT INDICDATA DEFERLIMITS=2000,4000 DDNAME = EXPFILE
SELECT myclob, myblob FROM mytable;
.EXPORT RESET
.QUIT
##

例8 – EXPORT

ワークステーションBTEQから遅延モードでLDOを転送し、列名を書き換える必要がある場合は、TITLE句を使用します。 "DEFERLIMITS=0,0"の指定は、すべてのLDOを遅延モードでエクスポートすることを強制するので注意してください。

.LARGEDATAMODE ON
.EXPORT INDICDATA DEFERLIMITS=0,0 FILE = SchoolImages.indicdata
SELECT s_pic (TITLE 'FirstGradeStudentImage'),
       t_pic (TITLE 'FirstGradeTeacherImage') 
       FROM FirstGradeImages;
SELECT s_pic (TITLE 'SecondGradeStudentImage'),
       t_pic (TITLE 'SecondGradeTeacherImage') 
       FROM SecondGradeImages;
.EXPORT RESET

この例の場合、レコード数は各問合わせの行数に依存せず、EXPORT RESETが実行されるまでリセットされません。 次のファイルがBTEQによって生成されます。

SchoolImages.indicdata

FirstGradeStudentImage_r1

FirstGradeTeacherImage_r1

FirstGradeStudentImage_r2

FirstGradeTeacherImage_r2

SecondGradeStudentImage_r3

SecondGradeTeacherImage_r3

SecondGradeStudentImage_r4

SecondGradeTeacherImage_r4

例9 – EXPORT

ワークステーションBTEQから遅延モードおよび非遅延モードでLDOを転送して、各テーブルの列に同じレコード番号を使用する場合は、テーブルの結合を使用してください。 DEFERLIMITSが指定されていないため、デフォルトの制限が使用されます。 "1000,10000"制限以内のLDOは非遅延転送としてエクスポートされ、その他すべては、遅延転送としてエクスポートされます。

.LARGEDATAMODE ON
.EXPORT LDOPREFIX 'doc_'
.EXPORT LDOSUFFIX 'txt'
.EXPORT INDICDATA DEFERTRANS FILE = document.indicdata
SELECT doclist1.prososal, doclist1.draft,
       doclist2.reviewed, doclist2.final
       FROM doclist1, doclist2
       Where doclist1.id = doclist2.id;
.EXPORT RESET

この例では、行数とレコード数が一致すること、および接頭辞と接尾辞の値の使用方法に注意してください。 次のファイルがBTEQによって生成されます。

document.indicdata

doc_proposal_r1.txt

doc_draft_r1.txt

doc_reviewed_r1.txt

doc_final_r1.txt

doc_proposal_r2.txt

doc_draft_r2.txt

doc_reviewed_r2.txt

doc_final_r2.txt

例10 – EXPORT

単一のエクスポートに複数のステートメントが含まれているが、各ステートメントに異なるDEFERLIMITS値が必要な場合、新しいEXPORTコマンドを問合わせの間に追加し、DEFERLIMITSオプションをリセットします。 メインのエクスポート ファイルが追加され、データは何も上書きされません。 しかし、メインのエクスポート ファイルのデータの一貫性を保つため、各問合わせは同じタイプの列を含む必要があります。
.LARGEDATAMODE ON
.EXPORT LDOPREFIX 'query1_' 
.EXPORT INDICDATA DEFERLIMITS=500,5000 FILE=test.dat
SELECT * FROM table1;
.EXPORT LDOPREFIX 'query2_' 
.EXPORT INDICDATA DEFERLIMITS=2000,8000 FILE=test.dat
SELECT * FROM table2; 
.EXPORT RESET

例11 – EXPORT

次の例では、2バイトのレコード長でRECORDMODEエクスポートを生成します。

.EXPORT DATA RECORDLENGTH=MAX64 FILE=test1.data
SELECT 'abc';
.EXPORT RESET

最初の2バイトで、test1.dataの16進ダンプ出力のレコード長が定義されることに注意してください。

05000300 6162630A

例12 – EXPORT

次の例では、4バイトのレコード長でRECORDMODEエクスポートを生成します。

.EXPORT DATA RECORDLENGTH=MAX1MB FILE=test2.data
SELECT 'abc';
.EXPORT RESET

最初の4バイトで、test1.dataの16進ダンプ出力のレコード長が定義されることに注意してください。

05000000  03006162  630A