PentahoのSpoonを起動してTransformationを編集する
仕事でメンテしているシステムのなかで、かなり限られたかたちではあるもののPentahoが利用されている箇所があり、どうせならもっと活用していきたいということで、ちょっと触ってみました*1。
バイナリを入手する
Pentahoは有償版と無償版があり、後者はコミュニティ・エディション(CE)と呼ばれています。私の手元のPCからGoogleで「Pentaho」を検索するとまず前者のサイトが上位に来ます。CEはこちらのサイトからダウンロードできます。
- Pentaho Communityにアクセス
- 「Download Section」に移動
- いくつかダウンロードの選択肢がありましたが「Data Integration」を選択してダウンロード
有償版には、インストーラがいろいろ煩雑なことを引き受けてくれたりといった便利な機能があるようで30日を期限に試用もできる模様。ただし今回はなにか明確な目標あって使用するわけでもないのでCEの方を選びました。
Spoonを起動する
Pentahoは複数のツールやWebアプリケーションの総称です。今回ダウンロードした「Data Integraion」はその一部。そしてその配下には「Spoon」、「Pan」、「Carte」など複数のコンポーネントがあります。それらの説明はこちらの記事にあります。また左記にも記載のない事項として、「Data Integraion」は別名「Kettle」というようです。
「Spoon」はジョブを定義するためのGUIアプリケーションで、このアプリケーションを使ってジョブを手動実行することもできます。というわけで何はともあれSpoonを起動します。
- 先ほどダウンロードしたファイル(CEはZipで配布されている)を解凍
- ターミナルを起動してcdコマンドで解凍後のディレクトリに移動
./spoon.sh
を実行
バージョンによってはここで「リポジトリ・ベース管理」か「ファイル・ベース管理」かの選択が迫られるケースもあるようですが(こちらの記事を参照)、私の場合は何ごともなく単にSpoonの画面が表示されました。
新しいTransformationを作成する
Pentahoで用いられる用語がいまいち理解できずにいるのですが、データの入力処理・中間処理・出力処理という一連の処理を「Transformation」(変換)と呼ぶようです。これが実際上「Job」とどう違うのかは理解できていません。
今回はまずlocalhostでPostgreSQLが起動していること、また当該PostgreSQLサーバ/クラスタ上にはこちらの記事でも触れた「dvdrental」データベースが存在することを前提にして、データ抽出と結合とその結果のファイル化を行う処理をつくってみます。
- Spoolの左側ペイン「ビュー」タブ→「データ変換」を右クリック→「新規」をクリック
- するとアクティブなタブが「デザイン」タブに変化し右側ペインに「データ変換1」というタブが表示される
- Command+Sと入力するかメニューから「ファイル」→「保存」をクリックするとTransformationをファイルとして保存できる
新しいデータベース接続を追加する
- いったん「ビュー」タブに戻り「データ変換」→「データ変換1」(新規作成中のもの)→「データベース接続」を右クリック→「新規」をクリック
- 「接続名」には適当な名前を入力
- 「接続タイプ」では「PostgreSQL」を選択
- 「ホスト名」には「localhost」を入力
- 「データベース名」には「dvdrental」を入力
- 「ポート番号」には「5432」を入力
- 「ユーザ」と「パスワード」には「postgres」を入力
- 「テスト」をクリックして接続確認後「OK」をクリックしてDB接続の追加が完了
Transformationを編集する
- 「デザイン」タブに戻る
- 「デザイン」タブ→「入力」→「テーブル入力」をドラッグして「データ変換1」タブ(前段の手順でファイル化している場合はそのファイル名がタブに名になる)にドロップする
- ドロップした「テーブル入力」のアイコンをダブルクリックすると設定画面が開く
- 「データソース名」で先ほど作成したDB接続を選択
- 「SQLステートメント」欄にあらかじめ入力されているSELECT文のテンプレートを修正し「OK」クリック
- この要領でactor、film、film_actorの3テーブルの入力処理を用意
- 「デザイン」タブ→「結合」→「マージ結合」をドラッグして「データ変換1」タブにドロップする
- 先に作成したactorテーブルの「テーブル入力」アイコンから「マージ結合」アイコンへと、Shiftキーを押しながらドラッグして矢印で結ぶ
- 同様にしてfilm_actorテーブルの「テーブル入力」と「マージ結合」も矢印で結ぶ
- 「マージ結合」のアイコンをダブルクリックすると設定画面が開く
- 「結合1のステップ名」「結合2のステップ名」でそれぞれ結合したい入力ソース──まずはactorとfilm_actorを選択
- 「フィールド(結合1)」「フィールド(結合2)」で2テーブルを結合するのにつかうキーを選択して「OK」をクリック*2
- さらにもう1つ「マージ結合」を作成して1つ目の「マージ結合」とfilmテーブルの「テーブル入力」のそれぞれと矢印で結ぶ
- 2つめの「マージ結合」のアイコンをダブルクリックして設定画面を開き、1つめのときと同じ容量で入力をする
- 「デザイン」タブ→「出力」→「Excel出力」をドラッグして「データ変換1」タブにドロップする
- 先ほど作成した2つめの「マージ結合」と「Excel出力」とを矢印で結ぶ
- 「Excel出力」アイコンをダブルクリックして設定画面を開く
- 「ファイル」タブの「ファイル名」で出力するファイルの名称を選択
- 「ファイル名に日付を含む」「ファイル名に時間を含む」のチェックを適宜ON/OFFする*3
- 「全般」タブでは出力シートの名称やヘッダ行を付けるかどうかなどを設定
- 「フィールド」タブで出力するフィールドとその型とExcelで表示する際の書式を設定*4
あとは「データ変換1」タブの上部にある緑色の三角ボタンをクリックすると定義した処理が順次実行されます。
今回はあくまでもPentahoの試用が目的でしたので、そもそもSQLで済ませればいい結合処理をPentahoが用意している中間処理ユニットを利用して実施しています。実際には(CSV・TSVを含む)テキストファイルやExcelファイルなど、リレーショナル・データベース以外の入力ソースと組み合わせて利用するのが一般的なのではないかと思います。
*1:「どうせなら」というのはつまり、Pentahoを使って実装されたそのサブシステムはまさにその実装方式のために周囲から「浮いて」おり、システム改修や日々の保守運用のなかでいつも厄介がられている、しかしそうではあっても現にそれを保守していかなくてはならないのであれば、むしろより活用の場を増やすことでナレッジを貯めこんでいくしかない・・・というような意味です
*2:このとき「フィールドを取得」ボタンをクリックすると矢印で結ばれた入力処理の対象カラムの情報がロードされます。このなかから不要なカラムを選択→右クリック→「選択した行を削除」をクリックという手順でカラムを選ぶこともできます。
*3:ファイル名の末尾に出力処理日時を示すサフィックスをつけるかどうかを選択するものです。
*4:ここでも「フィールドを取得」ボタンが使用できます。「マージ結合」の設定の時と同様、矢印で結ばれた前段処理で生成される(予定の)結果セットのカラムが自動でロードされます。