Hitachi

ノンストップデータベース HiRDB Version 9 コマンドリファレンス(Windows(R)用)


5.4.13 src_work文(分割入力データファイルの出力先の記述)

RDエリア単位のデータロードを実行する場合に,表単位の入力データファイルからRDエリア単位の入力データファイル(分割入力データファイル)を作成するときに指定します。src_work文は,データロード時に指定するのではなく,データロードの前準備として分割入力データファイルを用意するために指定するものです。

分割入力データファイルの作成の概要を次の図に示します。

図5‒13 分割入力データファイルの作成の概要

[図データ]

<適用基準>

横分割表にRDエリア単位にデータロードを並列実行する場合で,かつRDエリアごとに入力データファイルを準備していないときに指定します。

src_work文を使用すると,ユーザがRDエリアごとの入力データファイルを用意する必要がなくなります。

<前提条件>
  1. 入力データファイルは,DAT形式ファイル(拡張DAT形式を含む),及び固定長データ形式ファイルを使用できます。分割入力データファイルも同じ形式で出力します。

  2. 分割入力データファイルを作成する場合,表に対するINSERT権限が必要となります。

  3. 処理対象となる表は横分割表でなければなりません(分割方法,及び列構成には制限なし)。

  4. 分割入力データファイルは,シングルボリュームでなければなりません。ファイルが既にある場合は上書きされ,ない場合は新規に作成されます。

  5. 分割入力データファイルは,入力データファイルがあるホストと同一ホストに作成されます。

  6. 分割入力データファイル作成時は,データをチェックして出力しますが,次のデータエラーについてはチェックされません。

    ・クラスタキー順序不正

    ・キー重複エラー

    ・LOB列の格納データの不正※1

    ・抽象データ型の格納データの不正※2

    注※1

    次のどちらかです。

    ・LOB入力ファイルにアクセスできない。

    ・LOB列のデータ長がLOB列の定義長より長い。

    注※2

    次のどちらかです。

    ・プラグイン関数のデータチェックでエラーとなる不正データがある。

    ・BLOB型の引数エラー(注※1のエラーと同様)。

  7. 分割入力データファイルは次の名称で作成されます。

    【HiRDB/シングルサーバの場合】

    「src_work文に指定するディレクトリ名」+「入力データファイル名」+「RDエリア名」

    【HiRDB/パラレルサーバの場合】

    「src_work文に指定するディレクトリ名」+「入力データファイル名」+「サーバ名」+「RDエリア名」

    上記の絶対パス名やファイル名の長さは,OSの制限を超えないように注意してください。

    入力データファイルを複数指定した場合,「入力データファイル名」は先頭のファイル名となります。

    「RDエリア名」は,表格納用RDエリア名となります。

    なお,RDエリア名に\が含まれている場合,\をファイルパス名に使用するとパスセパレータとして扱われるため,「\」を「(」に置き換えます。

  8. src_work文指定のpdloadの実行では,処理対象表にアクセスすることはありません(処理対象表に排他は掛かりません)。

〈この項の構成〉

(1) 形式

 src_work 分割入力データファイルの出力先ディレクトリ名

(2) 説明

(a) 分割入力データファイルの出力先ディレクトリ名

分割入力データファイルを出力するディレクトリ名を絶対パス名で指定してます。

指定するディレクトリは,入力データファイルがあるサーバ又はホストでなければなりません。また,指定するディレクトリには,HiRDB管理者に対してアクセス権限を与えておく必要があります。

(3) 注意事項

  1. 分割入力データファイルの名称について

    同じ表格納用RDエリアに定義された複数の表に対して,同じ入力データファイル名でpdloadを複数回実行すると,分割入力データファイルの名称が同じになり,ファイルの内容が保証できなくなります。したがって,「src_work文に指定するディレクトリ名」,又は「入力データファイル名」がユニークな名称となるようにしてください。

  2. LOB列がある表について

    分割入力データファイルの作成は,入力データファイルを分割するだけなので,LOB入力ファイルにはアクセスしません。したがって,LOB列がある表の場合,LOB入力ファイルはpdloadを実行するホストから参照できる場所に配置する必要があります。

  3. 固定長データ形式の入力データファイルのDECIMAL型データの扱い

    DECIMAL型の符号正規化機能を使用している場合,分割入力データファイルに出力するDECIMAL型の値は正規化します。

  4. 該当RDエリアに格納するデータがない場合,0バイトの分割入力データファイルが作成されます。

  5. 分割入力データファイルを出力する場合,自動採番機能は使用できません。

  6. src_work文指定のpdloadの実行では,データの圧縮はしません。そのため,圧縮列の列データは圧縮しないで分割入力データファイルに出力します。

  7. 表格納RDエリア数が1024を超える表に対して実行された場合,1024RDエリア分の分割ファイルを作成する部分実行を複数回繰り返して,すべてのRDエリアの分割入力データファイルを作成します。そのため,次のメッセージがn回出力されます。pdload実行時に-mオプションを指定すると,これらのメッセージの出力数を削減できます。詳細は,「-m」を参照してください。

    • KFPL00700-I

    • KFPL00701-I

    • KFPL00702-I

    • KFPL00705-I

    • KFPL00709-I

    また,source制御文にerrorオペランドを指定していない場合,エラー情報ファイルがn個作成されます。エラー情報ファイルを複数作成させたくない場合は,source制御文にerrorオペランドを指定してください。詳細は,「error=エラー情報ファイル名」を参照してください。

    注※

    n=表格納RDエリア数÷1024

    なお,小数点以下は整数値に切り上げてください。

(4) 使用例

(a) 分割入力データファイルを作成してRDエリア単位のデータロードをする例

横分割表(T1)にRDエリア単位にデータロードを並列実行します。このとき,入力データファイル(c:\hirdb\pdload\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 c:\hirdb\pdload\control_file
    [説明]

    T1:処理対象表の名称

    c:¥hirdb¥pdload¥control_file:制御情報ファイルの名称

  • 制御情報ファイル(c:¥hirdb¥pdload¥control_file)の内容

     source FES:c:\hirdb\pdload\inputfile error=c:\hirdb\pdload\errfile    [1]
     src_work c:\hirdb\divwork    [2]
[説明]
  1. 入力データファイル,及びエラー情報ファイルの名称を指定します。

  2. 分割入力データファイルを作成するディレクトリ名を指定します。

3.RDエリア単位のデータロードの並列実行

「2.分割入力データファイルの作成」の結果,次の三つの分割入力データファイルが作成されます。

  • c:\hirdb\divwork\inputfile_BES1_RDAREA1

  • c:\hirdb\divwork\inputfile_BES2_RDAREA2

  • c:\hirdb\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 c:\hirdb\pdload\column_file T2 c:\hirdb\pdload\control_file
    [説明]

    -a:入力データファイルが固定長データ形式の場合の指定

    T2:処理対象表の名称

    c:¥hirdb¥pdload¥column_file:列構成情報ファイルの名称

    c:¥hirdb¥pdload¥control_file:制御情報ファイルの名称

  • 列構成情報ファイル(c:¥hirdb¥pdload¥column_file)の内容

     C1,type=dec(7)
     C2,type=char(10)
[説明]

表の構成列C1,C2の並びと,データ型を指定します。

  • 制御情報ファイル(c:¥hirdb¥pdload¥control_file)の内容

     source FES:c:\hirdb\pdload\inputfile error=c:\hirdb\pdload\errfile    [1]
     src_work c:\hirdb\divwork    [2]
[説明]
  1. 入力データファイル,及びエラー情報ファイルの名称を指定します。

  2. 分割入力データファイルを作成するディレクトリ名を指定します。

3.RDエリア単位のデータロードの並列実行

「2.分割入力データファイルの作成」の結果,次の二つの分割入力データファイルが作成されます。

  • c:\hirdb\divwork\inputfile_BES1_RDAREA1

  • c:\hirdb\divwork\inputfile_BES2_RDAREA2

上記のファイルを入力データファイルにして,RDエリア単位にデータロードを並列実行します。