Excel ソース¶
Excel データソースは、Apache POI ライブラリ (Apache POI API - the Java API for Microsoft Documents) を使用して、Excel ファイルからデータを抽出します。
新しい Excel データソースを作成するには、[File] > [New] > [Data source] メニューで [Excel] をクリックします。データソースを作成するダイアログが表示されます。
このダイアログでは、以下のデータを指定する必要があります。
Name: データソースの名前。
Type of file: ファイルのバージョンに応じて、[Stream tuples] オプションが有効または無効になります (下記参照)。
File location: Excel ファイルへのパス。このパスは、補間変数を使用することで、作成したクエリに応じてパラメータ化できます (「 補間変数によるパスなどの値 」を参照)。使用可能なパスの形式と、そこでパラメータを使用する方法については、「 Virtual DataPort でのパスの種類 」を参照してください。
Worksheet (オプション): データの抽出元とするワークシートの名前。
空のままにすると、ファイルの 1 番目のシートから基本ビューにデータが取得されます。
「Sheet1, Sheet2」のように、複数のシートをカンマ区切りで指定することもできます。
Excel ファイルのワークシート 1 つのみではなく、すべてのワークシートからデータを抽出する場合は、[Extract data from all sheets] をチェックします。この場合、基本ビューの各フィールドは、ファイルの 1 番目のワークシートの列によって決まります。したがって、以下の点を考慮する必要があります。
2 番目以降のシートに、1 番目のシートにない列があると、その列は無視されます。
1 番目のワークシートの列の一部が存在しないワークシートからデータを取得した行では、それらの列の値は NULL になります。
たとえば、Excel ファイルに 2 つのワークシートがあり、1 番目のシート (Sheet1) に A 列、B 列、および C 列が存在し、2 番目のシート (Sheet2) に A 列、C 列、および D 列が存在するとします。
基本ビューには、ファイルの 1 番目のシートにある A、B、および C の各列に対応するフィールドが存在します。このビューにクエリを実行して、ファイルの 2 番目のシートからデータを抽出すると、Virtual DataPort によって以下の処理が実行されます。
2 番目のシートには B 列が存在しないので、B フィールドの値として NULL が返されます。
D 列の値は無視されます。
これらのルールは、[Worksheets] ボックスに複数のワークシートを入力した場合にも適用されます。この場合、基本ビューのフィールドは、このリストの最初のワークシートの列によって決まります。
各行のデータの取得元であるワークシートの名前を格納するフィールドを基本ビューに追加するには、[Extract sheet name as a new column] をチェックします。このフィールドは、デフォルトで「sheet_name」という名前で追加されます。
[Extract data from all sheets] オプションをチェックした場合に、行のデータをどのワークシートから取得したかがわかると便利です。
StartCell と EndCell (オプション): 処理するセル範囲の最初のセルと最後のセル。
[StartCell] が
B2
、[EndCell] がZ99
の場合、範囲 B2:Z99 にあるデータが返されます。[StartCell] が
B2
、[EndCell] が空の場合、B2 からファイル末尾までのすべてのデータが取得されます。[StartCell] が空、[EndCell] が
Z99
の場合、範囲 A1:Z99 にあるすべてのデータが取得されます。両方のパラメータが空の場合、シートにあるすべてのデータが取得されます。
[Extract data from all sheets] オプションをチェックしている場合、このデータソースから作成した基本ビューからは、ファイルの各ワークシートにあるこのセル範囲のデータが返されます。
Has headers: 取得するデータの最初の行に、データではなく列名が格納されている場合は、このチェックボックスをチェックします。
Stream tuples: チェックすると、ファイルは SAX パーサー (Excel 2007 ファイル (*.xslx) でのみ使用可能) を使用して読み取られます。チェックしていない場合、ファイルは DOM パーサーを使用して読み取られます。
DOM パーサーと比較した SAX パーサーの利点は、メモリの使用量がきわめて少ないことです。サイズが大きい Excel ファイルを扱う場合に重要な利点となります。
[Stream tuples] をチェックするかどうかによって、このデータソースから作成する基本ビューのデータ型が影響を受けます。
[Stream tuples] をチェックしていない場合、Virtual DataPort サーバーでは、ファイルのメタデータから各フィールドの型が取得されます。
[Stream tuples] をチェックしている場合、Virtual DataPort サーバーでは、ファイルの最初の数行から各列の型が推測されます。
この型の推測に使用する行数は、
com.denodo.vdb.contrib.wrapper.xls.event.content.introspection.maxrows
プロパティで制御します。この値を変更するには、以下のコマンドを実行します。
SET 'com.denodo.vdb.contrib.wrapper.xls.event.content.introspection.maxrows'
= '<number of rows>';
[Stream tuples] をチェックしている場合、日付値が格納されている列は必ずテキストフィールドと推測されます。日時値 (localdate、timestamp など) を取得するには、以下の 2 つの方法があります。
[Stream tuples] チェックボックスのチェックをはずします。これによって、日付値が格納されている列が基本ビューでは日付型のフィールドと推測されます。この場合、SAX パーサーを使用できなくなるので、パフォーマンスの面で不利になる問題があります。
大きなサイズの Excel ファイルには使用しないでください。Excel ファイルの行数が数千行以下であることがわかっている場合のみクリアしてください。
この基本ビューから選択ビューを作成し、 TO_LOCALDATE 、 TO_TIME 、 TO_TIMESTAMP 、または TO_TIMESTAMPTZ の各関数を使用して、テキストフィールドを日時フィールドに変換します。
[Metadata] タブでは、データソースを保存するフォルダを設定して説明を指定できます。データソースを編集する際、 ボタンをクリックして、その所有者を変更することもできます。
[Save] をクリックするとデータソースが作成されます。次に、[Create base view] をクリックすると、新しい基本ビューに設定されるスキーマが表示されます。[Save] をクリックすると基本ビューが作成されます。
他のデータソースと異なり、1 つの Excel データソースから作成できる基本ビューは 1 つだけです。同じファイルからデータを取得する基本ビューをもう 1 つ作成する必要がある場合は、Excel データソースをもう 1 つ作成します。
管理ツールでは、Excel データソースはデータソースの一種と見なされますが、内部的にはカスタムデータソースです。そのため、以下のように軽微な影響がいくつかあります。
Excel データソースを列挙する VQL コマンドは LIST DATASOURCES CUSTOM ですが、これによって、Excel データソースだけでなく、すべてのカスタムデータソースのリストが返されます。
Excel データソースをエクスポートする場合 (データソースを右クリックして [Export] を選択)、選択されるソースのタイプは [Custom] です。
Excel ファイル処理時のサイズ制限¶
メモリの問題を防ぐため、データソースが処理する Excel ワークシートのサイズには制限があります。ファイルではなくワークシートが大きい場合、クエリは以下のエラーが表示されて失敗します。
The file is not accessible or is not an Excel file. Tried to allocate an array of length xx, but the maximum length for this record type is 100,000,000.
If the file is not corrupt or large, please open an issue on bugzilla to request increasing the maximum allowable size for this record type.
As a temporary workaround, consider setting a higher override value with IOUtils.setByteArrayMaxOverride()
Excel ファイルはディスクへの保存時に圧縮されることに注意してください。この制限は、解凍後のワークシートのサイズとほぼ同じです。
制限はデフォルトで 150 MB です。この値を変更するには、以下のコマンドを実行します。
SET 'com.denodo.vdb.contrib.wrapper.xls.event.byteArrayMax' = '<maximum size of sheet in bytes>';
たとえば、制限を 200 MB に増やすには、以下を実行します。
SET 'com.denodo.vdb.contrib.wrapper.xls.event.byteArrayMax' = '209715200';
イントロスペクション中に別の形式でテキストとして検出されるフィールド¶
Virtual DataPort では、イントロスペクションでテキストとして検出されるフィールドが日付形式と数値形式のどちらであるかを検出し、検出された形式に基づいてフィールドの値を表示します。
この動作を無効にすることができます。日付の場合は、以下を実行する必要があります。
SET 'com.denodo.vdb.contrib.wrapper.ExcelWrapper.skipEmbeddedFormatForDates'='false';
数値の場合は、以下のコマンドを実行します。
SET 'com.denodo.vdb.contrib.wrapper.ExcelWrapper.skipEmbeddedFormatForNumbers'='false';
上記のいずれかのコマンドが実行された場合、値は無効化された形式のテキストとして表示されます。