2013年5月14日火曜日

初めてのPentaho Data Integration 7 ファイルからのVariable読み込み

多数の変数を扱う場合、ShellやBatchで全部指定するのは使いにくいので設定ファイルを作って読み込む方が現実的でしょう。

例えばこのようなJobを組み込むと良いでしょう。
  • Job
    • Variableを設定
    • これらはBatch/Shellで上書き出来ます。

    • 変数を読み込むTransformationを指定
    • 相対パスで指定してみました。
  • Transformation



    • CVS Input
    • 区切り文字も指定出来るようにしてあります。
      文字コードは残念ながらハードコードです。
    • Filter
    • #で始まる行を無視します。 これでコメントを混ぜる事が出来ます。

    • Set Variable
    • Kye列をパラメータ名とし、Value列を値として設定します。

    • Write to Log
    • 設定された情報をLogに書き込むとエラーなどの場合に調査が出来ます。

  • Config
  • Key Value
    # This is configuration file.  The line starting with # shall be ignored.
    Country France
    
使用方法
区切り文字をタブでは無く、「;」に変更した場合あ以下の様に指定します。
  • Windowsの場合、
  • kitchen.bat -file:"C:\Temp\ETL\Job\SetVariables.kjb" -param:ConfigFieldDelimiter=";"

  • Linuxの場合、
  • sh kitchen.sh -file:"/home/somebody/ETL/Job/SetVariables.kjb" -param:ConfigFieldDelimiter=";"

初めてのPentaho Data Integration 6 Job

Jobはファイルを操作したり、エラー時にメールを送信したり、Transformationよりも大きな目的で使われます。また、TransformationはStepでデータが並列処理されるのに対し順々に処理される事が大きな違いです。
例えばこんな感じで使います。
処理は
  1. Set varialbesで変数を設定
  2. Transfromationでデータ処理
  3. Simple evaluationで条件分岐
  4. 条件に合わなければメールを送信
  5. 終了 
Set variables, Transformation, Mail too manyでエラーが起きればMail Alarmでメールが送信されます。

個人的に良く使うのは以下です。 詳細はSampleやCommunityを参照して下さい。
当然、扱うデータと目的に大きく依存しますので参考程度にしてください。
  • 全般
    • START : 当たり前です。 ここから処理が開始されます。
    • Job : 他のJobを呼ぶ
    • Set variables : 同じTransformationでvariableだけ変えて処理する時に使います。
    • Success :処理の最後に入れます。 入れなくても動くのですが理解しやすいように入れています。
    • Transformation :  そのまま。
  • メール
    • Mail : メール送信。
  • ファイル管理
    • Copy Files : ファイルコピー。 正規表現で複数ファイルをコピー出来ます。
    • Delete file : 1ファイルの削除
    • Delete files :  正規表現で複数ファイルを削除出来ます。
  • 条件
    • Simple evaluation : 変数や前のTransformationの結果で条件分岐
    • Wait for :  待ち。 エラーの後に1秒待って、再処理などで使います。
  • スクリプト
    • Shell :  Pentahoで出来ない処理をShellに任せます。
  • Untility
    • Write to Log :  ログを書き出します。
  • ファイル転送
    • Get a file with FTP : FTPでファイル取得。 
    • Put a file with FTP : そのままです。
大きなファイルをGet/Put FTPすると中断される場合を想定するとこんな感じのJobを使います。



2013年5月13日月曜日

初めてのPentaho Data Integration 5 パラメータ(Variable)

使いこなすと非常に便利なパラメータ(Variable)です。
ファイル名や検索条件など変更の為にプログラムを修正したくない場合に使います。
また相対パスを使ったファイルの指定にも使います。
CVS file inputのファイル名のように<$>マークが付いている場所、SQLを書くStep、Modified Java Script Value、Get Varialbesで使えます。

パラメータの設定は
  1. 編集 - 設定 で変換設定画面を出す
  2. パラメータタブで名前と値を設定
  3. そのままでは選択肢に現れず、使い勝手が悪いので一度、プレビューします。
  4. エラーが出ても気にしない、気にしない。
色々な指定が出来ます。
  1. <$>マークが付いている場所
    1. カーソールを持って行き、Control+スペースを押す
    2. 使用出来るパラメータがドロップダウンメニューで表示されます。
    3.  選択すると${}で囲まれたパラメータが表示されます。 手入力でもOKです。
      • 相対パスを使う場合、例えば以下のような構造でTranformationフォルダ内のTransformationからReportフォルダフォルダ内のfileを指定する場合はこんな感じで指定します。
      • ${Internal.Transformation.Filename.Directory}${file.separator}..${file.separator}..${file.separator}Report${file.separator}file
        
      • $[ASCIIコード]と手入力する事で特殊文字も入力出来ます。
  1. SQL
  2. 「Table Inputの場合、先行のステップから値を引き継ぐ」にチェックを入れないと参照されません。
  3. Modified Java Script Value
  4. 関数 - 特殊関数にあるgetVariableを使います。 1つ目の引数がパラメーター、2つ目は初期値です。
  5. Get Variables
  6. これは単純です。
変更方法は実行時にBatch, Shell Scriptで指定、Set Variables Stepで指定、Modified Java Script Valueで指定の3つです。
  1. 実行寺にBatch, Shell Scriptで指定
  2. Windowsの場合、
    pan.bat -file:"C:\temp\Variables.ktr" -param:COUNTRY="France"
    Linuxの場合、
    sh pan.sh -file:"/home/somebody/Variables.ktr" -param:COUNTRY="France"
  3. Set Variables Stepで設定
  4. フィールド名の値を変数名に設定します。 スコープとは影響範囲です。
    「Valid in the Java Virtual Machine」とするとJVMで共有されてしまいますので注意して下さい。
    設定した変数は同じStepでは使えず、次のStepやJobで使えるようになります。
  5. Modified Java Script Valueで設定
  6. 関数 - 特殊関数のsetVarialbesを使います。引数はフィールド名、変数、スコープの順です。
    設定した変数は同じStepでは使えず、次のStepやJobで使えるようになります。
覚えてしまえば非常に便利ですので使いこなして下さい。

2013年4月22日月曜日

初めてのPentaho Data Integration 4 良く使うStep

良く使うStepたち。 具体的な使い方はSampleやCommunity Siteを参照して下さい。
使用頻度は扱うデータと目的に大きく依存しますので参考程度にして下さい。
  • 入力
    • CSV input
      • 1ファイルの読み込み。
    • Text file input
      • 複数のファイルの読み込み
      • ファイル名に例えば*.txtなどの正規表現も使える
    •  Generate Rows
      • 空や定数の入力を作る
    • Get File Names
      • フォルダ内のファイル名を取得
      •  その後、フィルターを通してファイルを読み込んだりする事が多い
    • Data Grid
      • Generate Rowsと異なり、Row毎に異なる値を設定出来る
      • テストの時にダミーデータを作るのに便利
    • Table input
      • データベースからの読み込み
  • 出力
    • Table output
      • データベースへの書き込み
      • テーブルの入れ替えと追加だけ出来、変更は出来ない
    • Update
      • データベースへ変更だけが出来る
    • Insert / Update
      • データベースへ追加と変更が出来る
    • Delete
      •  データベースの削除
    • Text file output
      • ファイルへの書き込み
  • 変換
    • Select values
      • 残すフィールドの指定
      • 削除するフィールドの指定
      • フィールド名の変更、型変換
    • Calculator
      • プログラムを書かないのは良いのですが、機能が少ないのと冗長になるので余り使っていません。 Modified Java Script Valueを代わりに使います。 
    • Replace in string
      • 文字列の置き換え
      • 1フィールドの置き換えだけの場合に使います。 複数の処理になるとModified Java Script Valueを使う事が多いです。
    • Row normalizer
      • 指定行を列に変換する。
      • 使い方が難しいので別に説明するかも知れません。
    • Row denormalizer
      •  複数の列を行に変換する
      • 使い方が難しいので別に説明するかも知れません。
    • Sort rows
      • 並べ替え
      • 良く使います
  • ユーティリティ
    •  Write to log
      • デバッグに重要ですので出力しましょう
    • Mail
      • e-mailを送る
  •  フロー
    • Abort
      • エラーや異常値が見つかったら中断したりする時に使う
    •  Append streams
      • 1つの入力の後に別の入力を繋げて出力
    •  Dummy (do nothing)
      • デバッグ時にプレビュー用に追加する事もある
      • 複数の入力を順序を気にせず繋げる場合にも使う
    • Filter rows
      • そのままフィルターです。 非常に良く使います。
    • Java Filter
      • 分岐条件をJava Expressionで書く事が出来る
      • 便利そうですが使った事がありません
    • Switch / Case
      • 条件によって複数の分岐先を指定
      • 余り使う機会が無い
  • スクリプト
    • Modified Java Script
      • Javascriptを使って色々な処理が出来る
      • 新しい列の作成、文字列の切り出し、計算、型変換など
      • 使いすぎるとGUIベースのPentahoの意味が無いとの批判も、、、
    • Execute SQL script
      • 入力を元にSQLを実行
      • 入力をWhere句の条件に入れてDeleteする場合に使ったりします
  • ルックアップ
    • Stream lookup
      • フィールドの値が同じ場合に「ステップ名」のフィールドを取得
    • Database lookup
      • 入力を元にデータベースに問い合わせてフィールドを取得
      • 毎回データベースに問い合わせるのでパフォーマンスが悪い。 大量のデータを処理するなら別にTable inputとStream lookupを使った方が良い。
    • Database join
      • Database lookupは表またはビューに対して単純なlookupしか出来ないが、joinでは複雑なSQLを書く事が出来る
  • 結合
    • Merge Join
      • SQLで言う所のInner Join, Outer Join
    • Merge Rows (diff)
      • 二つの入力の差を出力
  • 統計
    • Group by
      • ユニークはRowだけを出力したり、件数を数えたり、合計を計算したりする
      • 文字列を連結する事も可能
    • Analytic Query
      • 前後のRowの情報を取得する事が出来る
    • Sample rows
      • テストの時にデータを減らしたりする場合に使う事が多い
      • 先頭行だけ取得したい時にも使う
  • ジョブ
    • Copy rows to result
      • 入力をメモリに保持
    • Get rows from result
      • メモリから入力を取得
    • Get Variables
      • 変数の取得
    • Set Variables
      • 変数の設定
  • マッピング
    • Mapping (sub-transformation)
      • いわゆるサブルーチンの呼び出し(Transformation)
    • Mapping input step
      • サブルーチンでの入力取得
    • Mapping output step
      • サブルーチンでの出力

初めてのPentaho Data Integration 3 Oracle DBからテキストファイルへの出力

Oracle DBからテキストファイルへの出力方法を説明します。
  1. Oracle JDBCドライバを準備
  2. ドライバをPentahoインストレーションディレクトリのlibext¥JDBCへコピー
  3. Table inputをドラッグ
  4. ドラッグしたTable inputをダブルクリックして設定する
    1. データソースをクリックして接続に必要な情報を設定 
      • テスト接続を押して設定が正しいか確認出来ます
    2. SQLの選択を押し、DBを解析してテーブルを表示させます
    • 自分でSQLを入力する事も出来ます
  5. テーブルを選択する
  6. フィールド名をSQLに追加しますか?に「はい」を押し、全ての列名を入力させます
    • もちろん、「いいえ」を押し、SELECT *のままでも問題ありません
    • プレビューする事も出来ます
  7.  Text file outputをドラッグ
  8. Shiftを押しながらTable inputからText file outputまでドラッグして結合する
  9.  Text file outputをダブルクリックして設定する
    1.  「ファイル」タブのファイル名に出力ファイル名を入力する
    2. 「フィールド」タブの「フィールドの取得」を押すと入力ステップの全フィールドが入力される
    3.  フィールド」タブの「最小桁数にする」を押すと出力ファイルが最小になります
  10. 「ファイル→名前を付けて保存」で出来上がったファイルを保存
  11. 「Action→実行」で動作!

  12. 動画はこちら

2013年4月18日木曜日

初めてのPentaho Data Integration 2 テキストファイルからOracle DBへの取り込み

テキストファイルからOracle DBへの取り込みの方法を説明します。

  1. CSV file inputをドラッグ
  2. ドラッグしたCSV file inputをダブルクリックして設定する
    1. ファイル名を入力する
      • C:\Program Files\Pentaho\data-integration-4.4.0\samples\transformations\files\sales_data.csv としてみます。
    2. 区切り文字を入力する
    3. 「フィールドを取得」を押しフィールドを自動設定する
      • データタイプ、書式、長さを読み取ったデータから 推定してくれます
      • プレビューすることも出来ます
      • 今回のデータにはASCII文字以外が含まれていることが見えます
  3. 不要な列を削除する為にSelect valuesをドラッグ
  4. Shiftを押しながらCSV file inputからSelect valuesまでドラッグして結合する
  5. Select Valueをダブルクリックして設定する
    • 削除フィールドでPRODUCTCODE, ADDRESSLINE1, CONTACTFIRSTNAMEを選択する
    • 選択フィールド : 残すフィールドを選択
      • フィールド名を変更する事も出来る。
      • 「フィールドの選択」を押すと入力ステップの全フィールドが入力される
    • 除去フィールド :除去するフィールドを選択
      • 「フィールドの除去」 を押すと入力ステップの全フィールドが入力される
    • メタ情報  : データタイプやフィールド名を変更
      • 「フィールドの変更」 を押すと入力ステップの全フィールドが入力される
  6.  Table outputをドラッグ
  7. Shiftを押しながらSelect valuesからTable outputまでドラッグして結合する
  8. Table outputをダブルクリックして設定する
    1. 「全般」タブの開始時にテーブル内容を削除する」にチェックを入れる
    2. データソースをクリックして接続に必要な情報を設定
      • テスト接続を押して設定が正しいか確認出来ます  
    3.  出力先のテーブル名を「全般」タブのテーブル名に入力
    4.  「全般」タブのSQL→実行を押し、テーブルを作成
      • テーブルが無ければ作成するSQLが自動的に作成される
      • テーブルがあれば、入力フィールドと一致しない部分を修正するSQLが作成される
    5. 「列名」タブのフィールドマッピングを押す
    6.  自動を押し入力フィールドとデータベース列名を対応させます
  9. 「ファイル→名前を付けて保存」で出来上がったファイルを保存
  10. 「Action→実行」で動作!

動画はこちら

2013年2月28日木曜日

初めてのPentaho Data Integration

使い方が分からないと言われる事が続いたのでPentaho Data Integration 4.4.0の簡単な使い方を説明します。
  1. 先ずは何はともあれここからダウンロード。 今回はUnix/Linuxとも同じコードを使うようにpdi-ce-4.4.0-stable.tar.gzにしました。 
  2. 7-Zipなどでお好きな所に解凍して下さい。 例えばC:\Program Files\Pentaho\data-integration-4.4.0とか。
  3. 解凍した場所に出来たspoon.batをダブルクリック。 環境によってはset-pentaho-env.batを先ずダブルクリックしないといけないかも知れません。
  4. 取り敢えず、Repositoryを使わないでCancelする。

  5. 今日のヒントを教えてくれるので読みたかったら読んでから閉じる。
  6.  ファイル - 新規作成 - データ変換 と選択して新しいファイルを作成する。
  7.  入力 / CVS file inputを「デザイン」からドラッグ
  8. CVS file inputをダブルクリックしてファイル名を選択する。
  9. フィールドを取得して入力列を定義する。
    • ファイルの先頭を読み込んで入力列のデータタイプ、書式、精度を自動的に設定する。 読み込む行数は図のサンプルサイズで決定します。
    • フィールド区切りをカンマからタブに変えるにはタブの挿入ボタンを押す。
    • ここでプレビューする事も出来ます。
  10. 出力 / Text file outputをドラッグ
  11. シフトを押しながらCSV file inputからText file outputまでドラッグして連結します。
  12. Text file outputをダブルクリックして出力ステップを定義
    •  フィールドタブで出力列を設定します。ここでフィールドの取得ボタンを押すと自動的に前のステップから引き継いだ列を全て定義出来ます。
    • ファイルに出力する場合は文字列に精度を入れていると空白で埋められますので最小桁数にするボタンを押した方が良いでしょう。


  13. 実行!
  14. 設定画面が出ますが今は無視して実行して下さい。

動画にもしてみました。
http://www.youtube.com/watch?v=gdYXtXnGvAQ