pentaho etl@devlove関西
DESCRIPTION
DevLOVE関西 2014/03/29 プログラマ35歳定年説勉強会で発表した内容。TRANSCRIPT
Pentaho ETLでドラッグ&ドロップデータ変換
自己紹介● 德納 弘和 (とくのう ひろかず)● 某社の工場のITシステム部門● 39才にして IT部門へ移動して4年目
– 遅れを取り戻すべく日夜勉強中● 少し覚えた言語
– VBA, SQL, JavaScript, Java, Perl, Shell...● コードを極力書かないのがお気に入り
– Pentaho ETL, Oracle APEX, Mojolicious
2013年の学びと挑戦● ユニケージ開発手法● Perl, Mojolicious● Jenkins● 自動テスト jUnit, Mockito, shUnit2● Twitter Bootstrap, Google Maps APIなど● 勉強会の楽しさ!
– エフスタ!– オープンデータカフェ会津– JAWS-UG会津
● CODE for AIZU参加
2014年の学びと挑戦● LODチャレンジ応募● Hack for Town in Aizu参加● Meteor(Node.js, MongoDB) on Nitrous.IO● GitHubデビュ〜● Amazon DynamoDB● DevLOVE大阪デビュ〜 今ここ
Pentaho ETLって?
● Pentaho– 世界で最も人気のあるオープンソースETLツール– 他にBIサーバー, OLAP, Data Miningなども
ETL (Extract, Transform, Load)– 何かを持って来て、加工して、出力する事
何が良いの?
● Open Sourceで無料!● 人気がある→活発な開発、長期サポート● 有償サポートもあり● 「プログラム」無しで簡単に処理出来る
– ノンプログラマの学習コストが低い● 高速処理 : 基本は行単位の並列実行● 多彩な標準部品
– 入出力 : Text, XML, DB(40種+!), Excel, CIFS, Mail
– 複雑な処理はJavaScriptなどで記述可能
ドラッグ&ドロップ● 基本はマウス操作
処理が見える
● データの流れが見える● 前のStepの完了を待たずに次の処理が開始
– 特にDBなど遅いデバイスを使う場合に完了が早い
DDL自動作成、SQL実行
テーブル修正のSQLも自動作成
こんな事も出来ます● データのグラフ表示、分析
– ぱっとインタラクティブな分析● Clusteringで分散処理● 流行のHadoop連携● リモート処理用Webサーバー(Carte)
良く無い所● 日本語の情報が少ない● 「普通のプログラマ」に受けが良く無い
– 並列処理 : 感覚的にShell scriptに近い– GUI : 何でもクリックは手間– 素人っぽさ : この手のソフトは世界中で反発される– 「いつも通り」に出来ない : 経験者利点がなくなる
● 型から外れると面倒– Pentahoに限らず、Framework共通の欠点– 入力列が未確定の場合は複雑な処理が必要
● ETLファイルを動的に修正するとか、、、
ご清聴ありがとうございました
以下は時間が足りず、話せなかった内容です。
色々な標準部品 入力● CSV input 1ファイルの読み込み。● Text file input 複数のファイルの読み込み。正規表現も可● Generate Rows 空や定数の入力を作る● Get File Names フォルダ内のファイル名を取得● Data Grid Row毎に異なる値を設定可能● Table input データベースからの読み込み
色々な標準部品 出力● Table output DBへの書き込み 入れ替えと追加だけ出来、変更は出来ない
● 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の意味が無い、、、
● Execute SQL script 入力を元にSQLを実行 Where条件でDeleteとか
色々な標準部品 ルックアップ● Stream lookup フィールドの値が同じ場合に
「ステップ名」のフィールドを取得● Database lookup 入力を元にデータベースに問い合わせて
フィールドを取得毎回DBに問い合わせるので遅い。大量のデータを処理するなら別に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)
いわゆるサブルーチンの呼び出し● Mapping input step
● サブルーチンでの入力取得● Mapping output step
サブルーチンでの出力
遅いStepも一目で見える
参考● Pentaho.com(英語)● Pentaho Community(英語)● 開発者Matt Castersのブログ(英語)● Adventures with Open Source BI(英語)● Pentaho日本正規代理店KSKアナリティクス● Think IT Pentaho徹底解説● 技術的に自由なブログ