bdu
説明
バルク データ ユーティリティ(BDU)はコマンド ライン ユーティリティで、区切り文字付きテキスト ファイルのデータを PSQL テーブルに読み込むことができます。テーブルおよびデータベースは既に存在している必要があります。
BDU、テーブル、データベースおよび PSQL データベース エンジンはすべて同じコンピューター上に存在する必要があります。区切り文字付きテキスト ファイルは、ローカル ドライブ、マップ ドライブ、マウントされたフォルダーまたは共有フォルダーの中でデータベース エンジンがローカルにアクセス可能である必要があります。
デフォルトの区切り文字を使うこともできますし、ユーザー指定の区切り文字を使用することもできます。区切り文字に使用する文字がデータ自体に含まれていてはいけません。次の表は許可されている区切り文字の一覧です。
表 14 列の区切り文字
区切り文字 | 表示 |
タブ | \t(デフォルト) |
印刷可能な任意の 1 文字(制御文字は印刷不能ですが、ヌル、タブ、改行(LF)および復帰(CR)は例外です。) | (*、A、t、l など) |
メモ: PSQL では、ヌル終端文字(\0)や二重引用符(")は列の区切り文字として使用できません。
表 15 行の区切り文字
区切り文字 | 表示 |
改行文字 | \n(デフォルト) |
復帰(CR) | \r |
復帰改行(CR LF) | \r\n |
BDU では、一重引用符(')および二重引用符(")のみがテキストの囲み文字として使用できます。データ ファイルには、一重引用符または二重引用符で囲まれた列値を含むことができます。たとえば、"Fred"\t"22"\t"2459"\t"Sales"\t という列値は二重引用符で囲まれ、タブ文字で区切られています。
BDU は、連続した区切り文字をヌル値として扱います。ユーティリティは、連続した列区切り文字を検出すると列にヌル値を挿入し、その列をヌル値許可とします。
ヌル値には囲み文字は使用できません。次の列データでは、2 番目の列にヌル値を挿入します。この列には囲み文字が使用されていないことに注意してください。
"Fred"\t\t"2459"\t"Sales"\t
概要
bdu {database_name} {table_name} {data_file}
[-<e|E> max_errors]
[-<r|R> reject_file]
[-<f|F> first_row]
[-<l|L> last_row]
[-<t|T> field_term]
[-<n|N> row_term]
[-<o|O> output_file]
[{-<u|U> login_id} {-<p|P> password}]
[-<c|C> encoding]
[-<h|H>]
メモ: BDU を使用してセキュリティが設定されているデータベース(Btrieve セキュリティ ポリシーが[混合]に設定されている)にデータを読み込む場合、提供される資格情報(ユーザー名およびパスワード)が PSQL データベースのユーザー アカウントおよびシステムのユーザー アカウントと一致する必要があります。
パラメーター
表 16 バルク データ ユーティリティのパラメーター
パラメーター | 必須/省略可能 | デフォルト値 | 説明 |
database_name | 必須 | | ローカル PSQL エンジンに接続するデータベース名 |
table_name | 必須 | | そこに含まれるテーブルの名前 |
data_file | 必須 | | 区切り文字付きテキスト ファイルの名前とロケーション |
-<e|E> max_errors | 省略可能 | 0(ゼロ) BDU は最初のエラーが発生すると終了します。 | BDU が終了するまでに無視するエラーの数。 |
-<r|R> reject_file | 省略可能 | stderr | 読み込みに失敗した行を書き出すファイルの名前。指定するディレクトリが存在している必要があります。ただし、指定したディレクトリにファイルが存在しない場合は作成されます。 |
-<f|F> first_row | 省略可能 | 行 1 | 読み込みを開始する区切り文字付きテキスト ファイルの最初の行。このパラメーターを使用すると、ヘッダー行をスキップすることができます。たとえば、ヘッダー行が 1 行目の場合は、first_row に 2 を設定します。 |
-<l|L> last_row | 省略可能 | ソース ファイルの終わり。 | ソース ファイルの最終行(この行は読み込まれます)。最終行が読み込まれると、読み込みは停止します。 |
-<t|T> field_term | 省略可能 | カンマやタブ文字などの文字。 | ソース ファイルの列区切り文字。 |
-<n|N> row_term | 省略可能 | 改行文字 | ソース ファイルの行区切り文字。 |
-<o|O> output_file | 省略可能 | stderr | 読み込み中の情報およびエラー メッセージを書き出すファイルの名前。指定するディレクトリが存在している必要があります。ただし、指定したディレクトリにファイルが存在しない場合は作成されます。 |
-<u|U> login_id | 省略可能 | | リレーショナル エンジンに接続するユーザーの名前。 |
-<p|P> password | 省略可能 | | リレーショナル エンジンに接続するパスワード。 |
-<c|C> encoding | 省略可能 | システムのコード ページまたは "ASCII"(システムのコード ページが判定できない場合) | encoding に対して有効な値は次のとおりです。 •ASCII •UTF-8 •UTF-16LE •UTF-16BE encoding パラメーターでは、大文字と小文字が区別されず、引用符も必要ありません。 例を参照してください。 メモ: データ ファイルに BOM(バイト オーダー マーク)が含まれている場合、BDU はその BOM で指定されたエンコードを用います。つまり、コマンド ラインでencoding パラメーターの値を指定したとしても、データ ファイルで BOM を使用して UTF-8、UTF-16LE、または UTF-16BE のエンコードを示していた場合は、BDU はそのエンコードを優先して使用します。 encoding パラメーターに対して不正な値を入力した場合には、"コマンド ライン引数 -c (ファイル エンコード) の値が無効です。" というメッセージが返されます。 |
-<h|H> | 省略可能 | | BDU のバージョンと使用法のヘルプを表示します。 |
注記
各種設定
BDU を使用するのに PSQL 設定パラメーターを変更する必要はありません。
BDU はアクセラレイティド モードを使用してデータをテーブルに読み込みます。データの読み込み中、MicroKernel はトランザクション ログを実行しません。
アーカイブ ログを使用している場合は、データ ファイルを再度バックアップします。
エラー ログ
デフォルトで、BDU はすべての情報とエラー メッセージを標準エラー ストリーム(stderr)に記録します。ユーティリティが情報またはエラー メッセージを書き込むログ ファイルを指定することができます。
重大なエラーと回復可能なエラーの 2 種類は記録されません。重大なエラーが起きた場合、BDU はエラーからの復旧を行うことができないため、終了します。たとえば、区切り文字の欠落したデータ ファイルは重大なエラーです。
回復可能なエラーが起きた場合、BDU はエラーをスキップして処理を継続します。ユーティリティは、スキップしたエラーの回数を保持していて、ユーザーが指定したスレッショルドに達すると終了します。デフォルトで、スレッショルドにはゼロが設定されています。
制約
BDU を使用してデータを読み込む際には、以下の制約が適用されます。
制約 | 説明 |
参照整合性(RI)エラーは RI 違反と見なされる | 行は拒否されます。 |
任意の一意のキーまたは主キーの違反 | 行は拒否されます。 |
非ヌル列に値が指定されていない 1 | 列のデフォルト値に無関係に、行は拒否されます。 |
ヌル値を許可する列に値が指定されていない 1 | 列のデフォルト値に無関係に、ヌルが挿入されます。 |
データがロードされているテーブルには、INSERT トリガーが含まれています。 | BDU はエラーを返し、そのテーブルを読み込みません。テーブルの INSERT トリガーを削除し、BDU を再実行してください。 |
データが読み込まれているテーブルには CLOB または BLOB 列(リレーショナル データ型の LONGVARCHAR、NLONGVARCHAR、または LONGVARBINARY)が含まれています。 | BDU はそのテーブルを読み込まず、"ターゲット テーブルに LONGVARCHAR、NLONGVARCHAR、または LONGVARBINARY データ型が含まれています。これらのデータ型はサポートされていません。" というメッセージを返します。 |
行の順序 | BDU は、区切り文字付きデータ ファイルを順不同と見なします。行の元の順序は保持されない可能性があります。 |
データ フィールド | サポートされる唯一の形式は yyyy-mm-dd です。 |
時刻フィールド | サポートされる唯一の形式は yyyy-mm-dd です。 |
タイムスタンプ フィールド | サポートされる唯一の形式は yyyy-mm-dd HH:MM:SS.MS です。 |
空白と列の区切り文字 | データ値が引用符で囲まれた場合でも、列の区切り文字とデータ値の間には空白を入れてはいけません。 |
1 テーブルの作成中または更新中に定義した列のデフォルト値は、BDU によって認識されていないためです。 |
最良実施例
可能であれば、データベース読み込みが最小のとき、または、読み込み中のテーブルに同時セッションが存在しないときに BDU を実行してください。
読み込み中のテーブルにインデックスが含まれている場合は、BDU を使用する前にインデックスを削除します。読み込みの完了後インデックスを再作成します。
読み込み中のテーブルに CHECK 制約がかけられている列がある場合は、BDU を使用する前に CHECK 制約を削除してください。読み込み完了後に制約を再指定します。
サンプル ソース ファイル
以下のデータ内容を使用して、サンプルの文字区切りテキスト ファイルが作成されています。使用例を検証するのに、このファイルを使用することができます。例では、このファイルを data_file.txt として使用しています。
以下のデータ内容はカンマ区切りになっているため、BDU では -t パラメーターを指定する必要があることに注意してください。-t パラメーターは、タブ文字以外の区切り文字では必須です。
psqlBDUsample_1,12345,psql,101,18446744073709551615
psqlBDUsample_2,12346,psql,102,18446744073709551614
psqlBDUsample_3,12347,psql,103,18446744073709551613
psqlBDUsample_4,12348,psql,104,18446744073709551612
psqlBDUsample_5,12349,psql,105,18446744073709551611
psqlBDUsample_6,12350,psql,106,18446744073709551610
psqlBDUsample_7,12351,psql,107,18446744073709551609
psqlBDUsample_8,12352,psql,108,18446744073709551608
psqlBDUsample_9,12353,psql,109,18446744073709551607
psqlBDUsample10,12354,psql,110,18446744073709551606
ソースの入力として使用されるデータ ファイルは、データ値を引用符で囲んだ場合でも、列の区切り文字とデータ値の間に空白を含めてはいけません。
例
以下の例では、BDU_Table という名前のテーブルが Demodata サンプル データベースに含まれているものと仮定しています。Demodata にこのようなテーブルを追加するには、次のクエリを使用します。
CREATE TABLE BDU_Table (Name CHAR(20) NOT NULL CASE, PhoneNo INTEGER,BuildingName CHAR(25) NOT NULL CASE, RoomNo UINT NOT NULL,HeadOfDept UBIGINT NOT NULL)
BDU をデフォルトのオプションで実行するには次のように記述します。
bdu demodata BDU_Table C:\data_file.txt
メモ: 入力データはタブ区切りで、デフォルトのオプションを使用する必要があります。入力データがタブ区切りでない場合は、-t パラメーターを使用して区切り文字を指定する必要があります。
たとえば、カンマ区切りになっている
例のデータを使用する場合、次のように BDU を実行します。
bdu demodata BDU_Table C:\data_file.txt -t , ============
サンプル データベースの DEMODATA の Billing テーブルを対象に、タブ区切りデータを含むファイルを読み込むために DBU を実行するには次のように記述します。このファイルでは UTF-16LE エンコードを使用します。
bdu demodata Billing D:\billing_data_import.txt -c UTF-16LE
============
ユーザー名とパスワードを必要とするデータベースで BDU を実行するには次のように記述します。
bdu demodata BDU_Table C:\data_file.txt -u <ユーザー名> -p <パスワード>
============
最大のエラー数オプションを使用して BDU を実行するには次のように記述します。
bdu demodata BDU_Table C:\data_file.txt -e <ユーザーが許可するエラーの数>
たとえば、エラーが 100 個続くまで読み込むには、次のように記述します。
bdu demodata BDU_Table C:\data_file.txt -e 100
============
特定の列区切り文字オプションを使用して BDU を実行するには次のように記述します。
bdu demodata BDU_Table C:\data_file.txt -t <列区切り文字>
たとえば、ソース ファイルに、各行を分離するテキストが含まれる場合は次のように記述します。
bdu demodata BDU_Table C:\data_file.txt -t ,
============
特定の行区切り文字オプションを使用して BDU を実行するには次のように記述します。
bdu demodata BDU_Table C:\data_file.txt -n <行区切り文字>
たとえば、ソース ファイルに各行が \n で分離されるテキストを含まれている場合は、次のように記述します。
bdu demodata BDU_Table C:\data_file.txt -n \n
============
特定の開始行オプションを使用して BDU を実行するには次のように記述します。
bdu demodata BDU_Table C:\data_file.txt -f <読み込みを開始する行番号>
============
特定の行終端オプションを使用して BDU を実行するには次のように記述します。
bdu demodata BDU_Table C:\data_file.txt -l <読み込みを終了する行番号>
============
パラメーターは組み合わせて使用することができます。|で区切られ、' で囲まれたデータを含むソース ファイルの先頭 15 行を読み込むには次のように記述します。
bdu demodata BDU_Table C:\data_file.txt -f 1 -l 15 -t |