データアクセスのファインチューニング
CData ADO.NET Provider for XML を使うと、より複雑な開発やネットワークトポロジに役立つきめ細かな制御が可能になります。次の接続プロパティを使用して、データアクセスを微調整したり、ファイアウォールを介して接続したり、接続のトラブルシューティングを行ったりできます。
リソースの場所
URI はXML のリソースの場所を指定するために使用されます。 URI プロパティを、次の内1つを指定するように設定してください。- 値が空の場合は、URL を自動的にカレントディレクトリ"./" への参照に割り当てます。XML フォルダへの明示的なパスは、実行中のアプリケーションの環境に依存します。
- フォルダへのパス。
- .zip、.tar、または.gz アーカイブファイルへのパス。
- ファイルを含むディレクトリだけでなく、そのファイルも含めます。例: C:\Users\Public\Documents\CSVdata.zip
- ファイルまたはストリームへのパス - この場合、SELECT * FROM streamedtable を実行してファイルをクエリできます。
テーブルのモデル化
次のプロパティを設定して、本製品 がXML をテーブルとしてモデル化する方法を制御します。
- IncludeFiles:テーブルとしてモデル化されるファイル一式に含める、ファイル拡張子のカンマ区切りリストに設定します。(デフォルトでは、.xml および.txt ファイルがモデル化されます。)
- ファイルの拡張子を、'.' を除いて大文字で指定します。例:"XML,TXT"
- アーカイブファイルはサポートされており(ZIP、TAR、およびGZ)、フォルダのようにモデル化されます。
- RowScanDepth:指定した深さまで行をスキャンして、データ型を自動的に決定するように設定します。
複数ファイルを単一テーブルにパースおよびマージ
本製品 は単一ディレクトリ内の複数のファイルの読み込みとパースをサポートし、データを単一の結果セットにマージします。
この機能を有効にするには、URI プロパティをファイルマスクのディレクトリ(例:C:\MyDataFiles\*.xml)、またはディレクトリ(例:C:\MyDataFiles)に設定できます。ディレクトリがURI として指定されている場合、IncludeFiles を使用して含めるファイルの種類を識別します。
この機能は、Google Drive (e.g. gdrive://remotepath/*.xml)、Amazon S3 (e.g. s3://remotepath/*.xml)、FTP (ftp://server:port/remotepath/*.xml) などクラウドベースのサービスプロバイダーでも利用できます。
URI をディレクトリに設定するときは、ディレクトリであることを示すために必ずスラッシュ (e.g. s3://remotepath/) を最後に含めてください。
複数のファイルを含めるために、URI のカンマ区切りのリストがサポートされています。
すべてのファイル(ファイル拡張子のないファイルを含む)を取得するには、'*' のファイルマスクを使用するか (e.g. s3://remotepath/*)、'*' エントリを含めるようにIncludeFiles を設定します。
拡張子のないファイルだけを含めるには、IncludeFiles を設定して'NOEXT' エントリを含めます。
ファイル一式をパースするとき、ファイルはキューに入れられます。
各ファイルはストリーミング形式で取得され、パースされます。各行はパースされるときにプッシュされます。
したがって、ファイルは決してメモリに格納されたり、ディスク上のテンポラリロケーションに格納されたりすることはありません。
そのため、必要なメモリ使用量が制限されます。
メタデータの検出
複数のファイルを読み込むとき、本製品 は最初に識別されたファイルをメタデータ検出に使用します。
パフォーマンス上の理由から、メタデータの検出には1つのファイルが使用されます。
最初に識別されたファイルに、部分的なXML データが含まれている場合
(ディレクトリ内の他のファイルと比較して)、他のファイルのカラム/データは返されないことがあります。
これは、本製品 が、メタデータ検出に使用される単一のファイルから、選択したファイルで使用可能なすべてのカラムを適切に識別できないためです。
これらのケースを回避するには、"MetadataDiscoveryURI" オプションをOther プロパティから設定できます(例:MetadataDiscoveryURI=file:///C:\MyDataFiles\main.xml)。
MetadataDiscoveryURI が指定された場合、本製品 は
指定されたURI を使用してテーブルとカラムを検出します。
メタデータが検出されると、URI の値がXML データの取得と解析に使用されます。
エラー処理
複数のファイルをパースする場合、ファイルをパースできない場合があります(無効なXML、ネットワーク接続の問題、など)。
そのような場合、本製品 は例外メッセージを返しませんが、ErrorInfo#TEMP という
テンポラリテーブルにエラーを記録します。
これは、大きなバッチのファイルを読み込んでいる最中に失敗して、やり直しが発生しないためです。
代わりに、初期クエリが終了した後でテンポラリテーブル(ErrorInfo#TEMP)をクエリすることができます。
これにより、パースに失敗したファイルがあるかどうかを識別でき、失敗した要求を再試行して、それらを最初の結果セットとマージすることができるようになります。
エラーリストを取得するには、次のクエリを発行します:SELECT * FROM ErrorInfo#TEMP。
このテーブルには次の2つのカラムが含まれます:URI およびDescription。
URI には、失敗した1つのファイルのURI が含まれます(URI プロパティで設定して再試行できます)。
Description には、ファイルがパースに失敗した理由に関する説明が含まれています。エラーが発生しなかった場合、空の結果セットが返されます。
サブディレクトリの移動
本製品 は、ローカルファイルをパースするときにサブディレクトリの移動をサポートします。
この機能は、URI 値のディレクトリ名に'*' ワイルドカード文字を使用することで公開されます。
例えば、一意の名前(日付値など)を持つフォルダを含む'Data' ディレクトリがあり、それぞれに似たようなXML データファイルがあるとします。
URI を'file:///C:\Data\*\*.xml' に設定するか、ファイルマスクなしのディレクトリ
'file:///C:\Data\*' に設定することで、これらすべてのファイルを単一のテーブルに読み込むことができます。
また、ディレクトリの部分一致もサポートされています。
例えば、 '2018' で始まるフォルダ内のすべてのXML ファイルを取得するには、次のURI 値:file:///C:\Data\2018*\*.xml を使用できます。
Note:クラウドリソースに接続するときは、ディレクトリ名にワイルドカードを使用することはできません。