Pentaho Data Integration 入門編 (1) - 機能概要と用語整理

# サマリ
この記事では以下について紹介しています。

* 機能概要(入門編としてPentaho Data Integrationでできることを整理)
* 用語整理(Pentaho Data Integrationの基本的な用語を整理)

# 機能概要
Pentaho Data Integrationで具体的に何ができるのかを整理しました。

* 基本的なETL機能
  * データ抽出
      * DB、ファイル(CSV/固定長/Excel/Json/XML等)、RestAPI、LDAP等へアクセスしデータを取得
      * 特にDB(Table)からデータを取得する場合はSQLを使用することになるので、SQL上に変数を埋め込んで条件を変更しながらデータを取得することも可能、条件を作っておいてLoopさせてSQLを動的に発行しながら処理を行うとか)
      * S3上のファイルへ直接アクセスしデータを取得
      * ストリームデータ(JMS、Kafka、MQTT)の取得
      * Avro、Parquet、Cassandra、CouchDB、HBase、Mongoからのデータ取得や、HDFS上のファイルへの直接アクセス
      * GoogleAnalytics、Salesforce、SASのデータへの対応 ※使ったこと無いからどこまでできるのか不明
      * メールを受信してデータを取得(添付ファイルを取得して読み込むことも可能)
      * 指定したフォルダ配下のファイルを正規表現で検索して読み込む(サブフォルダも含む)
      * システムデータ(システム日付、処理開始日、IPアドレス、ホスト名等いろいろ)

  * データ加工
      * 文字列加工(substr、置換、Mapping、padding、Trim、結合)
      * シーケンスの追加や定数追加、NULL変換、データの正規化や非正規化、データソート
      * フィールド結合、フィールド分割、フィールド単位の文字コード変換
      * 日付や時間の計算
      * 集計などのグループ化処理(Sum、最大、最小、最初、最後、平均、中央、カウント等)
      * 型変換
      * データフィルタやCaseによる実施処理の変更
      * データ結合(Join、Lookup等)
      * 統計情報(標準偏差、最大、最小、中央値、平均値等)
      * データサンプリング
      * ファイルのエンコーディング
      * Excel関数のようなFunctionによる各種変換(IFなどもあるので条件による可変処理が可能)
      * スクリプト言語で好きな処理を実装可能(Javascript、Groovy、Jython、JRuby)

  * データロード
      * DB、ファイル(CSV/固定長/Excel/Json/XML等)、LDAP、データをロード
      * S3上へ直接ファイル出力
      * ストリームデータへの出力
      * Avro、Parquet、Cassandra、HBase、Mongo、HDFSへのファイル出力
      * ファイル添付してメール送信

* JOBコントロール
  * 各種処理の実行順を制御(処理に成功したらAの処理を実行、失敗したらBの処理を実行、指定した以降の処理を並列実行する、特定処理をLoopさせる等)
  * ファイルやフォルダの存在有無をチェック
  * Webサービスの死活チェック
  * DBへの接続チェックやTableの存在有無チェック
  * Pingによるサーバーの死活チェック
  * Pentaho単体でのスケジュール実行　※Pentahoサーバーが必要

* その他
  * エラーハンドリングやデータバリデーション(該当したエラーデータのみをファイル出力しておき、正常データのみをDBへロードする等が可能)
  * ファイル転送(FTP、SCP)やローカルでのファイルコピー、フォルダ作成などのファイル操作
  * 同サーバー上のスクリプトファイルの実行
  * 外部サーバー上のスクリプトを実行(ssh)
  * 作成したETL処理の設定を外部から変更して動的に実行する機能(例えばCSVのフォーマットだけが違うが後続処理は同じことをしたい場合などに、実行するCSVファイルによって、外部からフォーマット情報を渡して動的に設定を変えるようなことが可能)
  * RestAPI経由でPentahoのJOBを実行する(単体でJOB実行することもできるし、Jsonとかで結果を戻すことも可能) ※Pentahoサーバーが必要

ざっと思いつくままに書きましたが、世にあるバッチ処理で必要な機能はだいたい揃っていると思います。
バッチ処理はシェルスクリプトやどのようなプログラム言語でもかけますが、誰でもわかりやすく実現したい処理を作成できるという点では、ETLツールは優れているかと思います。
Pentahoは無償で特に制限なく使用できるので、とりあえずETLツールを試してみるにはおすすめです。

無償で使用できるETLツールとしては、Pentahoの他に有名なものではTalendもありますが、中身は大体同じと思っています。Talendさわったこと無いですが・・・
もし、ETLに興味がわきましたら無償で使えるPentahoやTalendをさわってみて、自分にとってより使いやすい方をご利用ください。
一応、このアカウントでは、PentahoのETLについて具体的な使い方などを記載していきますので、ご参考になれば幸いです。

# 用語整理
Pentaho Data Integrationを使用するうえで、理解しておいたほうが良い用語を整理しました。

* Pentaho
 * ペンタホと読みます
 * 統合BIツールとして、レポーティング機能、OLAP機能、ダッシュボード機能、ETL機能などを持つ各OSSプロダクトを統合した製品です

* Pentaho Data Integration
 * ペンタホデータインテグレーションと読みます
 * 統合BIツールとしてのPentaho製品の中のETL機能の呼称です
 * 頭文字をとってPDIと呼ばれることが多いですが、Kettleという呼び方もあります
 * PDIは、後述するSpoonやPan、Kitchenという機能を持っています

* Spoon
  * PDIに含まれているETL処理をデザインするためのクライアントツールです
  * Spoon上で後述するTransformationやJOBを作成したり実行したりします
  * 以下、Spoonを起動したところのイメージです

![spoon.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186651/2a721f87-67b7-dc97-8d71-2544e7877363.png)


* Transformation
  * 基本的なETL処理を行うための単位です
  * 一つのTransformationの中で、データを抽出し、加工、ロードなどを完結させるイメージです
  * ただしTransformationの中から別のTransformationを呼び出したりすることもできるので使い方次第ではありますが、ETL処理を多段に組んでいくことも可能です
  * 以下、TransformationをSpoon上で表示しているイメージです

![Transformation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186651/5ccecbe2-b7cd-d79f-ad1d-20a65f7ce818.png)

* JOB
  * 作成されたTransformationの処理順などの流れをコントロールする単位です
  * Transformationや別のJOBを呼び出すことが可能です
  * Transformation内で使用するファイルを別のサーバーからコピーしてきたり、Transformationを正常に実行するために事前に必要なファイルの存在チェックやDBの死活チェックなども実施することができます
  * 処理がエラーになったらログを出力して、メールを送るなども可能です
  * 以下、JOBをSpoon上で表示しているイメージです

![JOB.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186651/1f01ff39-271e-26be-32d0-d33cf99b757b.png)

* Pan
  * Spoonで作ったTransformationをバッチ実行する際に使用するスクリプトでPDIに含まれています
  * Spoon上で実行する場合は実行ボタンを押す必要があるので、タスクスケジューラーとかに組み込む場合に使用します

* Kitchen
  * Spoonで作ったJOBをバッチ実行する際に使用するスクリプトで、使い方はPanと同じです
  * Transformationを実行する場合はPanを、JOBを実行する場合はKitchenを使うという感じです

* Pentaho BA Server (Pentahoサーバー)
  * Pentahoの統合BIツールとしてのレポート表示やユーザ管理、スケジューラー管理などを行う機能です
  * PDIとは別に提供されているので、使用する場合は別途インストールする必要があります
  * Pentahoサーバーはレポジトリ機能も持つので、PDIのSpoonからPentahoサーバーにつなぐと、Spoonで作成したTransformationやJOBをレポジトリ上に保存することが可能です
  * レポジトリ上で管理することでPentahoサーバー上のスケジューラー機能でETL処理をスケジュール実行することが可能となります
  * RestAPIの機能も提供してくれるので、レポジトリ上のETL処理やPentahoサーバーのファイルシステム上のETL処理を指定して実行することが可能になります
  * 以下、Pentahoサーバーを起動してアクセスしたイメージです

![PentahoServer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/186651/84e66955-13a2-232b-3a16-6269f331708b.png)


# 使用方法
インストール方法については、以下をご参照ください。
[Pentaho Data Integration のインストール方法](https://qiita.com/mik/items/b6227b26cbd5bc099206)

次回は、より具体的なTransformationとJOBの作成方法をまとめていきたいと思います。


# サポートについて
OSS版であれば無償で使用が可能ですが、そうは言っても技術的なサポートがほしいという方もいらっしゃるかと思います。
国内では以下よりサポートを受けれるようです。もちろん有償になると思います。
必要であれば問い合わせてみてください。

[KSKアナリティクス](https://www.ksk-anl.com/product/pentaho/)
[日立](https://www.hitachi.co.jp/products/it/bigdata/platform/pentaho/index.html)