|
Pervasive Bulk Load は、すべてのバルク ロードの要求に対して 1 か所ですべてを行えるワンストップ手法を提供します。これは、Pervasive PSQL およびこのバルク ロード機能をサポートするすべての DataDirect Connect 製品にバルク ロード操作を行う上で単純かつ一貫性があります。つまり、標準ベースの API バルク インターフェイスを使用してバルク ロード アプリケーションを記述し、それから、その仕事を実行するためにすぐにデータベースのデータ プロバイダーまたはドライバーをプラグインすることができます。
データを Pervasive、Oracle、DB2、および Sybase にロードする必要があるとします。これまでは、バルク ロード操作のためにデータベース ベンダー製のツールを使用するか、独自のツールを作成する必要がありました。今では、Pervasive Bulk Load に組み込まれた相互運用性により、作業は非常に簡単になりました。もう 1 つの利点は、Pervasive Bulk Load は 100% マネージ コードを使用するため、ほかのベンダー製の基盤となるユーティリティやライブラリを必要としないことです。
異なるデータ ストア間でのバルク ロード操作は、クエリの結果をカンマ区切り値(CSV)形式ファイルであるバルク ロード データ ファイルに残すことによって完成されます。このファイルは、Pervasive PSQL ADO.NET データ プロバイダーと、バルク ロードをサポートする DataDirect Connect for ADO.NET データ プロバイダー間で使用できます。さらに、バルク ロード データ ファイルは、DataDirect Connect 製品やバルク ロード機能をサポートするデータ プロバイダーで使用できます。たとえば、Pervasive PSQL データ プロバイダーによって生成された CSV ファイルは、バルク ロード対応の DataDirect Connect for ODBC ドライバーで使用できます。
Pervasive PSQL ADO.NET データ プロバイダーで Pervasive Bulk Load を使用する 2 つの方法を次に示します。
この図で、ODBC アプリケーションは CSV ファイルへデータをエクスポートするコードを含み、ADO.NET アプリケーションは CSV ファイルを指定して開くコードを含みます。Pervasive PSQL ADO.NET データ プロバイダーおよび DataDirect ODBC ドライバーは一貫した形式を使用するため、これらの標準インターフェイスを介して相互運用性がサポートされます。
ADO.NET 用の Pervasive Bulk Load の実装は、事実上の業界標準である Microsoft SqlBulkCopy クラスによる定義を使用し、強力な組み込み機能を追加することで、柔軟性だけでなく相互運用性も高めて、バルク操作をより信頼性のあるものとしています。
データ プロバイダーには、Pervasive Bulk Load をサポートするためのプロバイダー固有のクラスが含まれます。詳細については、データ プロバイダー固有のクラスを参照してください。共通プログラミング モデルを使用する場合は、Pervasive Common Assembly のクラスを使用できます(Pervasive Common Assembly クラスを参照してください)。
Pervasive.Data.Common アセンブリには、バルク データ形式間の機能を提供する CsvDataReader および CsvDataWriter などの Pervasive Bulk Load に対応したクラスが含まれています。
共通アセンブリは、共通プログラミング モデルを使用するバルク ロード クラスのサポート機能も拡張します。つまり、SqlBulkCopy パターンが新しい DbBulkCopy 階層で使用できるようになりました。
データ プロバイダーの将来のバージョンには、共通プログラミング モデル技術を拡張するほかの機能が含められます。Pervasive.Data.Common アセンブリが対応しているクラスの詳細については、Pervasive Common Assembly クラスを参照してください。
異なるデータ ストア間でのクエリの結果は、カンマ区切り値(CSV)形式ファイルであるバルク ロード データ ファイルに保存されます。BulkFile プロパティで定義されるファイル名は、バルク データの読み書きに使用されます。ファイル名に拡張子が含まれない場合は、".CSV" と見なされます。
Pervasive PSQL ソース テーブルの GBMAXTABLE には 4 つの列が含まれています。次の C# コード例は、CsvDataWriter によって作成される GBMAXTABLE.csv および GBMAXTABLE.xml への書き出しを行います。この例では、DbDataReader クラスを使用していることに注目してください。
cmd.CommandText = "SELECT * FROM GBMAXTABLE ORDER BY INTEGERCOL"; DbDataReader reader = cmd.ExecuteReader(); CsvDataWriter csvWriter = new CsvDataWriter(); csvWriter.WriteToFile("¥¥NC1¥net¥PSQL¥GBMAXTABLE¥ GBMAXTABLE.csv", reader);
バルク ロード データ ファイルの GBMAXTABLE.csv には、次のようなクエリの結果が含まれます。
1,0x6263,"bc","bc" 2,0x636465,"cde","cde" 3,0x64656667,"defg","defg" 4,0x6566676869,"efghi","efghi" 5,0x666768696a6b,"fghijk","fghijk" 6,0x6768696a6b6c6d,"ghijklm","ghijklm" 7,0x68696a6b6c6d6e6f,"hijklmno","hijklmno" 8,0x696a6b6c6d6e6f7071,"ijklmnopq","ijklmnopq" 9,0x6a6b6c6d6e6f70717273,"jklmnopqrs","jklmnopqrs" 10,0x6b,"k","k"
GBMAXTABLE.xml ファイルは、このバルク ロード データ ファイルの形式を指定するバルク ロードの設定ファイルです。これについて次のセクションで説明します。
バルク ロード構成ファイルは、CsvDataWriter.WriteToFile メソッドが呼び出されたときに作成されます(詳細については CsvDataWriter を参照してください)。
バルク ロード構成ファイルは、バルク ロード データ ファイル内の列の名前とデータ型を定義します。これらの名前とデータ型は、データのエクスポート元のテーブルや結果セットと同様に定義します。
バルク データ ファイルが作成できなかったり XML 構成ファイルに記述されているスキーマに準拠していない場合は、例外がスローされます。XML スキーマ定義の使用法については、「バルク データ構成ファイル用の XML スキーマ定義」を参照してください。
構成ファイルを持たないバルク ロード データ ファイルが読み込まれた場合は、以下のデフォルトが想定されます。
バルク ロード設定ファイルは、バルク データ ファイルについて記述されており、基となる XML スキーマによってサポートされます。XML スキーマについては次で定義されています。
http://www.datadirect.com/ns/bulk/BulkData.xsd
前のセクションで示したバルク ロード データ ファイルは、バルク ロード構成ファイルの GBMAXTABLE.xml で定義されています。このファイルには、テーブル内の 4 つの列のそれぞれについてデータ型とその他の情報が記述されています。
<?xml version="1.0" encoding="utf-8"?>
<table codepage="UTF-16LE" xsi:noNamespaceSchemaLocation="http://www.datadirect.com/ns/bulk/BulkData.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<row>
<column datatype="DECIMAL" precision="38" scale="0" nullable="false">INTEGERCOL</column>
<column datatype="VARBINARY" length="10" nullable="true">VARBINCOL</column>
<column datatype="VARCHAR" length="10" sourcecodepage="Windows-1252" externalfilecodepage="Windows-1252" nullable="true">VCHARCOL</column>
<column datatype="VARCHAR" length="10" sourcecodepage="Windows-1252" externalfilecodepage="Windows-1252" nullable="true">UNIVCHARCOL</column>
</row>
</table>
バルク操作は、専用のバルク プロトコルを使用して実行できます。つまり、データ プロバイダーは基となるデータベースのプロトコルを使用します。場合によっては、専用のバルク プロトコルが使用できない場合があります。たとえば、ロードしようとするデータが、専用のバルク プロトコルが対応していないデータ型の場合です。その場合、データ プロバイダーは配列バインドなどの非バルク手法を自動的に使用してバルク操作を実行し、最適なアプリケーション稼働時間を継続します。
時には、異なる文字セットを使用するデータベース間でデータをバルク ロードする必要があります。
Pervasive PSQL ADO.NET データ プロバイダーでは、デフォルトのソース文字データ、つまり CsvDataReader からの出力および CsvDataWriter への入力は Unicode(UTF-16)形式です。ソース文字データは、常に CSV ファイルのコード ページに変換されます。しきい値を超えてデータが外部のオーバーフロー ファイルに書き出された場合、ソース文字データはバルク構成 XML スキーマで定義されている externalfilecodepage 属性で指定されたコード ページに変換されます(「バルク データ構成ファイル用の XML スキーマ定義」を参照してください)。構成ファイルで externalfilecodepage の値が定義されていない場合は CSV ファイルのコード ページが使用されます。
不要な変換処理を行わないためには、CSV および外部ファイルの文字データを Unicode(UTF-16)にするのが最良の方法です。以下のいずれかの状況では、アプリケーションにデータを別のコード ページで保存させたい場合があります。
構成ファイルでは、任意で文字型の列ごとに 2 番目のコード ページを定義することができます。文字データが CharacterThreshold プロパティで定義した値を超え、別個のファイルに格納される場合(外部オーバーフロー ファイルを参照してください)、この値はそのファイルのコード ページを定義します。
この値を省略したりソース列で定義されたコード ページが不明の場合は、CSV ファイルに定義されたコード ページが使用されます。
CsvDataWriter オブジェクトの BinaryThreshold または CharacterThreshold プロパティの値がしきい値を超えた場合、別のファイルが生成されてバイナリまたは文字データを格納します。これらのオーバーフロー ファイルは、バルク データ ファイルと同じディレクトリにあります。
オーバーフロー ファイルに文字データが含まれる場合、ファイルの文字セットは CSV バルク構成ファイルで指定された文字セットが決定します。
ファイル名には CSV ファイル名と拡張子 ".lob" が含まれます(たとえば、CSV_filename_nnnnnn.lob)。これらのファイルは CSV ファイルと同じ場所に存在します。_000001.lob から開始して 1 ずつ大きくなります。
デフォルトで、バルク コピー操作はトランザクションの一部ではなく分離した操作として実行されます。つまり、エラーが発生しても操作をロール バックするチャンスはないということです。
Pervasive PSQL では、既存のトランザクション内でバルク コピー操作を行うことができます。複数の手順で存在するトランザクションの一部としてバルク コピー操作を定義することができます。この手法を使うと、複数のバルク コピー操作を同じトランザクション内で実行し、トランザクション全体をコミットまたはロール バックすることができます。
エラー発生時にバルク コピー操作のすべてまたは一部をロール バックする方法については、Microsoft のオンライン ヘルプで "トランザクションとバルク コピー操作(ADO.NET)" を参照してください。
|