プログラマ38の日記

主にプログラムメモです。

CSV: DBクライアント ExecuteQuery でH2 Databaseを使う

前回CSVの加工の方法の1つとして紹介した「H2 Database」を使う方法です。

前提として、「Execute Query」と「H2 Database」のモジュールはダウンロードしていることとします。

 

次の内容です。

  1. 「Execute Query」を起動する。
  2. JDBCドライバを設定する。
  3. 接続先を登録する。
  4. 実際に使ってみる。

1. 「Execute Query」を起動する。

ダウンロードしたモジュールに、exeファイルが用意されていて、「eq.exe」をダブルクリックすると起動します。この場合、32bitのjavaコマンドを探しにいくので、64bitで動かしたい場合は、コマンドで起動します。

"D:¥x64Java¥bin¥javaw.exe" -Xms256m -Xmx2G -jar eq.jar

 「-server」オプションなど入れると気持ち早くなるかもしれません。

 2. JDBCドライバを設定する。

起動したらJDBCドライバを登録します。「Drivers > New JDBC Driver」をクリック

f:id:crmprogrammer38:20170907091259p:plain
Database Driverで、次のように設定 PathにはH2 Databaseのjarを指定します。
f:id:crmprogrammer38:20170907091604p:plain

3. 接続先を登録する。

「Connections> New Connection」をクリック

f:id:crmprogrammer38:20170907092032p:plain
「Database Connection」で次の登録をしてConnectボタンをクリックするとスタンドアロンで起動します。(urlをjdbc:h2:mem:. としたので、メモリモードです)

f:id:crmprogrammer38:20170907092211p:plain

4. 実際に使ってみる。

まず「H2 Database」の良さは、テーブル定義で桁が不要です。

create table sample( textfield varchar, decimalfield decimal)

こんなテーブル定義がOKです。桁を指定しないと最大サイズで定義されます。

そして、前回紹介した csvread と csvwrite でCSVを扱っていきます。

 

例として、Salesforceのグループメンバー(GroupMember)のデータを加工します。結局Salesforceを例にするのが簡単でした。。。

グループメンバー(GroupMember)はグループ:GroupId(公開グループ、キュー)に、ユーザかグループ:UserOrGroupId(公開グループ、ロール、ユーザ)が割り当てられている情報になります。

SalesforceのSOQLでは、ユーザかグループ:UserOrGroupIdの情報は参照先名がないので、SOQLでは辿ることができません。

こんな時はCSVを使って加工をします。

 

4-1.必要な情報のCSVを取得する。グループメンバー(GroupMember)、グループ(Group)、ユーザ(User)のCSVを取得します。それぞれ、D:SFGroupMember.csv、D:

SFGroup.csv、D:SFUser.csv として保存します。

4-2.Execute Queryでテーブルにロードします。

create table SFGroupMember as select * from csvread('D:SFGroupMember.csv');
create table SFGroup       as select * from csvread('D:SFGroup.csv');
create table SFUser        as select * from csvread('D:SFUser.csv');

4-3.SQLを実行し欲しい結果にする。

select * from
 SFGroupMember
inner join SFGroup parent
on SFGroupMember.GroupID = parent.ID
left join SFGroup child
on SFGroupMember.USERORGROUPID = child.ID
left join SFUser
on SFGroupMember.USERORGROUPID = SFUser.ID

上記SQLで、例えば、公開グループの中に公開グループがある場合や、公開グループの中にユーザがある場合など情報を取得することができます。(nullかどうかで出し分けするときれいに整形できると思います)