はじめに

初めてPentaho DI 触ってみて、その勢いでこの記事を書いています。
ド素人なので用語とか色々間違っているかもしれません。

環境

  • iMac (Retina 5K, 27-inch, 2017)
  • macOS High Sierra

Java のインストール

ここからJavaをインストールします。

Note:
Java10では動作しないみたいなので、8をインストールしました

Pentaho DI のインストール

ここPentaho Community Edition 8.0 > Data Integraton > All OSからZipファイルをダウンロードします。

Zipファイルのダウンロードができたら好きなところに展開します。

Pentaho DI の起動

展開したディレクトリに移動してSpoonを起動します。

$ cd deta-integration
$ ./spoon.sh

こんなのが立ち上がります。

スクリーンショット 2018-04-07 0.58.40.png

Note:
起動にはしばらく時間がかかります

Data Integration

実際にDIしてみます。
最近、ネ申Excelぽいのと戦ったので、それに似た要件でやってみます。

  • 入力1

    • IPアドレスとその利用者名の対のリスト
    • CSV形式
    • IPアドレスはオクテットごとに区切られている(ネ申Excel)
    • 表にすると以下のような感じ
    1st_octet 2nd_octet 3rd_octet 4th_octet user_name
    10 0 0 1 ikegami
    10 0 0 2 obata
    10 0 0 3 sakagami
  • 入力2

    • IPアドレスとそのアドレスが割り当てられている機器の情報の対のリスト
    • CSV形式
    • 表にすると以下のような感じ
    ip_address info
    10.0.0.1 aaa
    10.0.0.2 bbb

この入力から、以下の出力を作ってみます。

  • 出力

    • IPアドレスをキーに入力1と入力2を結合させたリスト
    • 表にすると以下のような感じ
    ip_address info user_name
    10.0.0.1 aaa ikegami
    10.0.0.2 bbb obata
    10.0.0.3 sakagami

入力ファイルのセット:E

  1. 左上の新規作成ぽいところからデータの変換を選択します。
    スクリーンショット 2018-04-07 1.37.54.png

  2. 入力 > CSV入力を右のワークスペース的なところにドラッグ&ドロップします。(2回繰り返す)
    スクリーンショット 2018-04-07 1.46.49.png

  3. ドラッグ&ドロップしてできたアイコンをダブルクリックして、入力データの情報を記入します。

    • 入力2の分も同様
    • 念のためプレビューで確認しておくと安心 スクリーンショット 2018-04-07 1.55.55.png
  4. ここまでで、こんな状態になります。
    スクリーンショット 2018-04-07 2.03.30.png

フィールド結合:T

つぎに、入力1のオクテットごとに区切られたIPアドレスを1つに結合させます。

  1. 変換 > フィールド結合を右のワークスペース的なところにドラッグ&ドロップします。
  2. フィールド結合のアイコンにカーソルを当てて、左下の入力コネクタを選択します。 スクリーンショット 2018-04-07 2.08.06.png
  3. 入力コネクタinput1のアイコンに接続させて、ステップのメインインプットを選択します。 スクリーンショット 2018-04-07 2.08.28.png
  4. フィールド結合のアイコンをダブルクリックして結合方法を記入します。
    • ターゲットフィールド名:結合して新しくできるフィールドの名前
    • 区切り文字:結合する際の区切り文字(今回はIPアドレスを作りたいので.を指定)
    • フィールド:結合したいフィールドを列挙
    • アドバンスドタブ > 選択したフィールドを削除する:チェックを入れると結合元のフィールドたちは削除される スクリーンショット 2018-04-07 2.17.56.png
  5. ここまでで、こんな状態になります。 スクリーンショット 2018-04-07 2.19.13.png

マージ結合:T

つぎに、IPアドレスをキーに入力1と入力2を結合させます。

  1. 結合 > マージ結合を右のワークスペース的なところにドラッグ&ドロップします。
  2. マージ結合入力コネクタをinput1に接続させて、Left hand side stream of the joinを選択します。 スクリーンショット 2018-04-07 2.23.55.png
  3. input2に対しても同様にして、Right hand side stream of the joinを選択します。
  4. マージ結合のアイコンをダブルクリックして結合方法を記入します。

    • 結合タイプ:結合タイプの指定(説明はめんどくさいので公式ドキュメントを引用)
    • フィールド名:結合のキーとするフィールドの名前

    FULL OUTER:
    all rows from both sources will be included in the result, with empty values for non-matching keys in both data streams
    LEFT OUTER:
    all rows from the first source will be in the result, with empty values for non-matching keys in the second data stream
    RIGHT OUTER:
    all rows from the second source will be in the result, with empty values for non-matching keys in the first data stream
    INNER JOIN:
    only rows having the same key in both sources will be included in the result

    スクリーンショット 2018-04-07 2.32.34.png

  5. ここまでで、こんな状態になります。
    スクリーンショット 2018-04-07 2.34.35.png

テキストファイル出力:L

最後に、結合結果を出力します。

  1. 出力 > テキストファイル出力を右のワークスペース的なところにドラッグ&ドロップします。
  2. テキストファイル出力の入力コネクタをマージ結合に接続させます。
  3. テキストファイル出力のアイコンをダブルクリックして、出力方法を記入します。
    • 拡張子:出力ファイルの拡張子(CSVを指定)
    • 全般タブ > 区切り文字:フィールドの区切り文字(CSVにするので,)
    • フィールドタブ > フィールド名:出力するフィールドの名前 スクリーンショット 2018-04-07 2.38.36.png

Note:
フィールドタブで出力するフィールドの選択や、フィールドの順序を設定できます

  1. ここまでで、こんな状態になります。 スクリーンショット 2018-04-07 2.40.42.png

実行

左上の三角ボタンをクリックすると、上で定義したDIが走ります。

できたCSVファイルを確認してみます。

$ cat output.csv
10.0.0.1,ikegami,aaa
10.0.0.2,obata,bbb
10.0.0.3,sakagami,

できた!

コマンドラインからの実行

Pan でコマンドラインからも実行できました。
-file=の後ろにSpoonで作成した.ktrファイルを指定して実行します。

$ ./pan.sh -file=qiita.ktr

参考

SpoonやらPanやらKitchenやら、それぞれの説明はここをみました。

【Pentaho Lab】トレーニング1日目(Kettle:ケトル)の復習

  • Spoon(スプーン)…ETLをモデリングするGUIツール。Kettleの中心コンポーネント。
  • Pan(パン)…SpoonでモデリングしたTransformationを実行するコマンドラインツール。
  • Kitchen(キッチン)…SpoonでモデリングしたJobを実行するコマンドラインツール。
  • Carte(カルテ)…Webサーバーとして動作し、リモート(サーバー側)でTransformationやJobを実行します。
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.