5.4.14 src_work文(分割入力データファイルの出力先の記述)
RDエリア単位のデータロードを実行する場合に,表単位の入力データファイルからRDエリア単位の入力データファイル(分割入力データファイル)を作成するときに指定します。src_work文は,データロード時に指定するのではなく,データロードの前準備として分割入力データファイルを用意するために指定するものです。
分割入力データファイルの作成の概要を次の図に示します。
- <適用基準>
-
横分割表にRDエリア単位にデータロードを並列実行する場合で,かつRDエリアごとに入力データファイルを準備していないときに指定します。
src_work文を使用すると,ユーザがRDエリアごとの入力データファイルを用意する必要がなくなります。
- <前提条件>
-
-
入力データファイルは,DAT形式ファイル(拡張DAT形式を含む),及び固定長データ形式ファイルを使用できます。分割入力データファイルも同じ形式で出力します。
-
分割入力データファイルを作成する場合,表に対するINSERT権限が必要となります。
-
処理対象となる表は横分割表でなければなりません(分割方法,及び列構成には制限なし)。
-
分割入力データファイルは,通常ファイルで,かつシングルボリュームでなければなりません。ファイルが既にある場合は上書きされ,ない場合は新規に作成されます。
-
分割入力データファイルは,入力データファイルがあるホストと同一ホストに作成されます。
-
分割入力データファイル作成時は,データをチェックして出力しますが,次のデータエラーについてはチェックされません。
・クラスタキー順序不正
・キー重複エラー
・LOB列の格納データの不正※1
・抽象データ型の格納データの不正※2
注※1
次のどちらかです。
・LOB入力ファイルにアクセスできない。
・LOB列のデータ長がLOB列の定義長より長い。
注※2
次のどちらかです。
・プラグイン関数のデータチェックでエラーとなる不正データがある。
・BLOB型の引数エラー(注※1のエラーと同様)。
-
分割入力データファイルは次の名称で作成されます。
【HiRDB/シングルサーバの場合】
「src_work文に指定するディレクトリ名」+「入力データファイル名」+「RDエリア名」
【HiRDB/パラレルサーバの場合】
「src_work文に指定するディレクトリ名」+「入力データファイル名」+「サーバ名」+「RDエリア名」
上記の絶対パス名やファイル名の長さは,OSの制限を超えないように注意してください。
入力データファイルを複数指定した場合,「入力データファイル名」は先頭のファイル名となります。
「RDエリア名」は,表格納用RDエリア名(インナレプリカ機能使用時はオリジナルRDエリア名)となります。
-
src_work文指定のpdloadの実行では,処理対象表にアクセスすることはありません(処理対象表に排他は掛かりません)。
-
(1) 形式
src_work 分割入力データファイルの出力先ディレクトリ名
(2) 説明
(3) 注意事項
-
分割入力データファイルの名称について
同じ表格納用RDエリアに定義された複数の表に対して,同じ入力データファイル名でpdloadを複数回実行すると,分割入力データファイルの名称が同じになり,ファイルの内容が保証できなくなります。したがって,「src_work文に指定するディレクトリ名」,又は「入力データファイル名」がユニークな名称となるようにしてください。
-
LOB列がある表について
分割入力データファイルの作成は,入力データファイルを分割するだけなので,LOB入力ファイルにはアクセスしません。したがって,LOB列がある表の場合,LOB入力ファイルはpdloadを実行するホストからNFSなどで参照できる場所に配置する必要があります。
-
固定長データ形式の入力データファイルのDECIMAL型データの扱い
DECIMAL型の符号正規化機能を使用している場合,分割入力データファイルに出力するDECIMAL型の値は正規化します。
-
該当RDエリアに格納するデータがない場合,0バイトの分割入力データファイルが作成されます。
-
分割入力データファイルを出力する場合,自動採番機能は使用できません。
-
src_work文指定のpdloadの実行では,データの圧縮はしません。そのため,圧縮列の列データは圧縮しないで分割入力データファイルに出力します。
(4) 使用例
(a) 分割入力データファイルを作成してRDエリア単位のデータロードをする例
横分割表(T1)にRDエリア単位にデータロードを並列実行します。このとき,入力データファイル(inputfile)は表単位であるため,RDエリア単位に実行するための分割入力データファイルを作成します。その後,RDエリア単位にデータロードを並列実行します。
- 1.表定義
CREATE FIX TABLE T1 (C1 DEC, C2 CHAR(10)) IN ((RDAREA1) C1 > 1000,(RDAREA2) C1 < -1000,(RDAREA3));
2.分割入力データファイルの作成
-
pdloadのコマンド
pdload T1 control_file
- [説明]
-
T1:処理対象表の名称
control_file:制御情報ファイルの名称
-
制御情報ファイル(control_file)の内容
source FES:/hirdb/inputfile error=/hirdb/errfile [1] src_work /divwork [2]
- [説明]
-
-
入力データファイル,及びエラー情報ファイルの名称を指定します。
-
分割入力データファイルを作成するディレクトリ名を指定します。
-
- 3.RDエリア単位のデータロードの並列実行
-
「2.分割入力データファイルの作成」の結果,次の三つの分割入力データファイルが作成されます。
-
/divwork/inputfile_BES1_RDAREA1
-
/divwork/inputfile_BES2_RDAREA2
-
/divwork/inputfile_BES3_RDAREA3
上記のファイルを入力データファイルにして,RDエリア単位にデータロードを並列実行します。
-
(b) 全列固定長のバイナリ形式の入力データファイルを使用する例
分割入力データファイルを作成する場合,バイナリ形式の入力データファイルは使用できません。ただし,すべての列が固定長のデータ型※で構成される表であれば,固定長データ形式として扱うことができます。
- 注※
-
次のデータ型です。
INTEGER,SMALLINT,DECIMAL,FLOAT,SMALLFLT,DATE,TIME,INTERVAL YEAR TO DAY,INTERVAL HOUR TO SECOND,CHAR,NCHAR,MCHAR,TIMESTAMP
- 1.表定義
CREATE FIX TABLE T2 (C1 DEC(7), C2 CHAR(10)) FIX HASH HSAH6 BY C1 IN (RDAREA1,RDAREA2);
2.分割入力データファイルの作成
-
pdloadのコマンド
pdload -a -c column_file T2 control_file
- [説明]
-
-a:入力データファイルが固定長データ形式の場合の指定
T2:処理対象表の名称
column_file:列構成情報ファイルの名称
control_file:制御情報ファイルの名称
-
列構成情報ファイル(column_file)の内容
C1,type=dec(7) C2,type=char(10)
- [説明]
-
表の構成列C1,C2の並びと,データ型を指定します。
-
制御情報ファイル(control_file)の内容
source FES:/hirdb/inputfile error=/hirdb/errfile [1] src_work /divwork [2]
- [説明]
-
-
入力データファイル,及びエラー情報ファイルの名称を指定します。
-
分割入力データファイルを作成するディレクトリ名を指定します。
-
- 3.RDエリア単位のデータロードの並列実行
-
「2.分割入力データファイルの作成」の結果,次の二つの分割入力データファイルが作成されます。
-
/divwork/inputfile_BES1_RDAREA1
-
/divwork/inputfile_BES2FES_RDAREA2
上記のファイルを入力データファイルにして,RDエリア単位にデータロードを並列実行します。
-