複数のExcelの売上ファイル、1つのテーブルに集約 元ファイルの場所までわかる
本記事はCDataが提供する「CData Software Blog」に掲載された「Excel & CSV ドライバ : ファイル集約時に元のファイルの場所を取得する」を再編集したものです。
CData Excel Drivers やCData 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 でアクセスすると以下のようにそれぞれのファイルに対してスキーマが作成されます。
プロパティ設定
クエリ
-- テーブル一覧を取得する
select SchemaName, TableName, Description from sys_tables;
結果
ここで、以下のようにAggregateFilesプロパティをTrueに設定すると、各ファイルのデータが1つのテーブルに集約されます。
プロパティ設定
クエリ
-- テーブル一覧を取得する
select SchemaName, TableName, Description from sys_tables;
結果
集約されたテーブルsales にクエリすると、以下のように売上データを記録した3つのファイルデータが集約されたテーブルにアクセスできます。
クエリ
-- salesテーブルのレコードを取得する
select * from sales;
結果
集約されたテーブルはソースとなるファイル情報は隠ぺいされます。一方でソースとなるファイルごとにデータを取捨選択したいといったケースがあります。このような要望に対し、ドライバは集約テーブルのレコードごとにソースとなるファイルの場所を表示することができます。
これを取得するにはIncludeResourceColumnプロパティをTrueに設定します。CData Excel Drivers ではv24.1 でこのプロパティがサポートされました。
このプロパティを設定したときの動作例を示します。集約テーブルにURI というカラムが追加され、各レコードのソースとなるファイルのパスが取得できます。
プロパティ設定
クエリ
-- salesテーブルのレコードを取得する
select * from sales;
結果