Excel & CSV ドライバ : ファイル集約時に元のファイルの場所を取得する

by 浦邊信太郎 | 2024年10月31日 | 最終更新日:2024年10月30日

CData Excel DriversCData CSV Drivers はExcel ファイルやCSV ファイルの内容をテーブルとしてアクセスしSQL での操作を可能にします。また、これらのドライバは複数のファイルのデータを一つのテーブルに集約する機能があります。例えば月ごとに分かれた時系列データを集約し、1年分のデータが格納された1つのテーブルとして扱いたいときなどに便利です。

本記事ではCData Excel Drivers やCData CSV Drivers で複数ファイルのデータを集約する方法と、集約時にソースとなるファイルの場所を取得する方法を紹介します。ここではCData Excel Drivers での設定方法を説明しますがCData CSV Drivers でも同様の方法を利用できます。

はじめに、以下のように3つのファイルに分かれた売上データ(Sales.xlsx)を1つのテーブルに集約する方法を示します。

これら3つのファイルは「C:\Work\Excel\Sales」にあると仮定します。デフォルトの設定でこれをCData Excel Drivers でアクセスすると以下のようにそれぞれのファイルに対してスキーマが作成されます。

プロパティ設定

プロパティ 設定値
URI C:\Work\Excel\Sales

クエリ

-- テーブル一覧を取得する
select SchemaName, TableName, Description from sys_tables;

結果

ここで、以下のようにAggregateFilesプロパティをTrueに設定すると、各ファイルのデータが1つのテーブルに集約されます。

プロパティ設定

プロパティ 設定値
URI C:\Work\Excel\Sales
AggregateFiles True

クエリ

-- テーブル一覧を取得する
select SchemaName, TableName, Description from sys_tables;

結果

集約されたテーブルsales にクエリすると、以下のように売上データを記録した3つのファイルデータが集約されたテーブルにアクセスできます。

クエリ

-- salesテーブルのレコードを取得する
select * from sales;

結果

集約されたテーブルはソースとなるファイル情報は隠ぺいされます。一方でソースとなるファイルごとにデータを取捨選択したいといったケースがあります。このような要望に対し、ドライバは集約テーブルのレコードごとにソースとなるファイルの場所を表示することができます。

これを取得するにはIncludeResourceColumnプロパティをTrueに設定します。CData Excel Drivers ではv24.1 でこのプロパティがサポートされました。

このプロパティを設定したときの動作例を示します。集約テーブルにURI というカラムが追加され、各レコードのソースとなるファイルのパスが取得できます。

プロパティ設定

プロパティ 設定値
URI C:\Work\Excel\Sales
AggregateFiles True
IncludeResourceColumns True

クエリ

-- salesテーブルのレコードを取得する
select * from sales;

結果

トライアル・お問い合わせ

関連コンテンツ