読者です 読者をやめる 読者になる 読者になる

M12i.

学術書・マンガ・アニメ・映画の消費活動とプログラミングについて

PDIユーザーガイドから「用語法と基本概念」

Pentaho

Pentaho Data Integration(PDI)はネット上のHow to情報もデスクトップ・アプリケーションのUIラベルも用語法がブレブレで非常に厄介です。そういうわけでいい加減に公式リファレンスで基礎を確認しておいたほうがいいなと思い、PDIユーザーガイドの「用語法と基本概念」のセクションを読んでみました。結論からいうと公式リファレンスからして用語法がブレていてちょっとがっかりさせられたというのが実際ですが。

原典はPentaho Infocenter 5.0のセクション"Build Full-Featured Solutions > Create DI Solutions > Terminology and Basic Concepts"です(2015/06/28取得)。

          * * *

用語法と基本概念

データ変換(Transformation)とジョブ(Job)をデザインできるようになるまえに、Pentaho Data Integration(Kettle)に関わる用語法(専門用語)に関して基本的な理解をする必要があります。

  • データ変換、ステップ、そしてホップ
  • Jobsジョブ
  • More About Hopsホップについてさらに詳しく

データ変換、ステップ、そしてホップ

データ変換(Transformation)はステップと呼ばれる論理的なタスクにより構成されるネットワークです。データ変換は本質的にはデータフロー(Data flow)です。下の例では、データベース開発者が、フラット・ファイルを読み込み、フィルタリングし、並び替え、そしてリレーショナル・データベースのテーブルへと登録するというデータ変換をつくっています。あるいは開発者は、エラーが検知されたとき、ダミー(Dummy)ステップ──このステップは実際には何も行わない──にデータを送る代わりに(訳注:下の図ではそのように実装されています)、そのデータをテーブルに記録したいと考えるかもれません。データ変換は、本質的にはデータの変換に関する設定(構成)の論理的集合から成る有向グラフです。データ変換のファイル名は.ktrという拡張子をとります。

f:id:m12i:20150628132941p:plain

データ変換に関係する2つの重要なコンポーネントはステップとホップです:

  • ステップ(Step)はデータ変換を組み立てる部品であり、上記の例でいえばテキストファイル入力(Text file input)やテーブル出力(Table output)に該当します。Pentaho Data Integrationでは140以上のステップが利用可能で、それらは機能に基づきグループ化されています。例えば、入力、出力、スクリプティングなどなど。それぞれのステップはデータ変換の過程で固有のタスクを実行するよう設計されています。上記の例でいえば、フラットファイルからのデータ読み込み、行セット(Rows)のフィルタリング、データベースへのログ出力などがそれにあたります。ステップはあなたの必要次第でその挙動を設定することができます。
  • ホップ(Hop。訳注:PDI 5.3の画面では「結合」と訳されていますが、Joinとの区別が付かなくなるため、ここではカタカナでホップと表記するに留めます)はデータの経路です。それはステップをつなぎ合わせ、データ構造に関するメタデータ(Schema metadata)をステップからステップへと受け渡すことを可能にします。上図の中では、順次実行(直列実行)が発生するように見えるかもしれません。しかしながら、それは正しくありません。ホップはステップに基づきデータの流れを決定するものですが、その実行は必ずしも順次(直列)である必要はないのです。データ変換を実行するとき、それぞれのステップは個別のスレッドで起動し、データを追加して次のステップに渡すのです。

ノート:すべてのステップは並列に起動・実行されます。よって初期化の順序は予測不可能です。そうした理由から、例えば、最初のステップで変数(Variable)を設定し、後続ステップでそれを利用しようとしてもできないのです(訳注:変数の宣言のようにステップの初期化過程で実行される処理に直列性が期待できないからといって、データフローの直列性が約束されないということではないはずです)。

Spoonの画面ではステップのアイコンにカーソルを当てると表示されるUI(訳注:ホバーメニューと呼ぶそうです)から、ステップをつなぎ合わせたり、設定変更したり、コンテキスト・メニューを開いたりすることができます。コンテキスト・メニューは下向き三角のボタンをクリックすると表示されます。ホップを使ってステップを接続する方法については、「ホップについてもっと詳しく」のセクションを参照してください。

f:id:m12i:20150628133044p:plain

ステップは複数の接続を持つことができます。接続により、あるいは複数のステップが結合され、またあるいはあるステップのための入力もしくは出力が提供されます。データ・ストリーム(Data stream)はデータ変換のなかであるステップからまた別のステップへと流れていきます。ホップはSpoonの画面上では矢印として表示されます。ホップはデータをステップからステップへと渡されるようにして、データの流れの方向と流れを決定します。あるステップの出力が複数のステップに送られる場合、データを複製する(複製してデータの全量を後続ステップに渡す)のか分配するのかを指定できます。

ジョブ

ジョブ(Job)はリソースや処理実行、ETL処理間の依存性を組み立てるためのワークフローのようなモデルです。

f:id:m12i:20150628133103p:plain

ジョブは一連のプロセスを実現するための独立した機能を提供する部品同士をまとめあげます。例えば、FTPでファイルを取得し、必要なテーブルがデータベース上に存在しているかどうかといった条件チェックを行い、そのテーブルにデータを登録するデータ変換を実行し、そしてもし当該のデータ変換が失敗したらエラーログをEメールで送信するといった具合に。ジョブの最終成果物は深夜のデータウェアハウスのアップデートなどなどです。

f:id:m12i:20150628133120p:plain

ジョブはジョブホップ(Job hop)とジョブエントリー、そしてジョブ設定(Job settings)とから構成されます。ジョブのなかではホップは異なる挙動を示します。これについては「ホップについてもっと詳しく」のセクションを参照してください。上記の例に見える通り、ジョブエントリーは独立した構成部品であり、ジョブを構成するもっとも重要な部品です。データ変換を構成する個別の部品はステップと呼ばれていました。ジョブエントリーは、データ変換の実行からWebサーバのファイル取得まで、広範にわたる機能を提供します。同じジョブエントリーを画面上で何回も使うこともできます。例えば、データ変換の実行のようなジョブエントリーを異なる設定を施しつつ複数個配置するといったように。ジョブ設定はジョブの振る舞いとロギングの方法を制御するためのオプションです。ジョブのファイルは.kjbという拡張子をとります。

ホップについてもっと詳しく

ホップ(Hop)は1つのデータ変換のステップもしくはジョブエントリーをもう1つの同種のそれに結びつけます。データの流れの向きは矢印によって示されます。ホップをつくるには、元になるステップをクリックしてから、Shiftキーを押し下げて向き先のステップに線を引きます。もう1つの方法として、ステップにカーソルを合わせると表示されるホバーメニューを使う方法もあります。元となるステップのホップ追加アイコンを起点にして向き先ステップまでドラッグをすることで矢印を引くことができます。

f:id:m12i:20150628133138p:plain

ホップをつくる方法はほかにもいくつかあります:

  • 元となるステップをクリックし、マウスの中ボタンを押し下げてから、向き先のステップに向けてドラッグします。
  • 2つのステップを選択してから、コンテキストメニューを表示して[新規結合](New Hop)をクリックします。
  • Ctrl+左クリック(Mac OS XではCommand+左クリック)で2つのステップを選択してから右クリックして[新規結合](New Hop)をクリックします(訳注:これが1つ上の方法とどうちがうのかは不明です)。

ホップを分割するには、既存の2つのステップを結ぶホップの上に新しいステップをドラッグ&ドロップします。ホップの分割を確認するダイアログが表示されます。この機能はまだ他のステップと結び付けられていないステップにのみ有効です。

データ変換のなかではループは許されていません。Spoonではあるステップから別のステップへと渡される行セット(Field values)の決定は、前段のステップに大きく依存しているためです(訳注:これでは説明になっていませんが、ようするに「先頭となるステップが決まらないと何もできない」ということのようです)。データ変換におけるループにより生じる問題はエンドレス・ループだけではないのです。ジョブのなかではループは許されます。Spoonではジョブエントリーの実行は順次実行となるためです。しかしながらエンドレス・ループとなっていないかきちんと確認してください。

データ変換のなかでは異なるフィールド構成(different layout)を持つ行セット(Rows)同士の混合は許されていません。例えば、異なる数のフィールドを持つテーブル入力ステップを使用するとします。この2つの行セットを混ぜあわせようとするとステップは異常終了します。これは期待した位置に期待したデータ型のフィールドが見つからないからです。異なるフィールド構成の入力を受け取るステップがある場合、トラップ・デテクターが警告を表示します。

複数のステップにホップがつながっている場合、データを複製するのか、分配あるいは負荷分散させる(訳注:原文では分配distributedと負荷分散load balancedはorで結ばれて別もののように扱われていますが、実際に画面を操作してみた限りではこれは同じ概念を指しているようです)のかを選択できます。ステップを選択し、右クリックしてから[データ移動](Data Movement)をクリックします。

f:id:m12i:20150628133157p:plain

ホップは有効化したり無効化したりできます(例えば動作検証目的に利用できます)。ホップを右クリックすると表示されるオプションメニューからこの操作ができます。

f:id:m12i:20150628133217p:plain

ジョブホップ

実行順序の指定に加えて、ホップは後続のジョブエントリーが実行されるための条件を指定する役割も持ちます。ジョブホップを右クリックすると表示されるメニューから評価モード(Evaluation mode。訳注:PDI 5.3の画面では[経路の選択]というラベルが当てられています)を指定できます。つまりジョブホップは制御フローそのものなのです。ホップはジョブエントリーを結びつけ、前段ジョブエントリーの結果に基づき後続で何が行われるか(訳注:あるいは行われないか)を決定するのです。

f:id:m12i:20150628133226p:plain

オプション 説明
無条件(Unconditional。訳注:PDI 5.3ではなぜか[未使用]という訳語が使用されています) 後続ジョブエントリーはホップの起点となるジョブエントリーの結果の如何にかかわらず実行される。
結果がtrueなら後続を実行する([Trueの場合]) ホップの起点となるジョブエントリーの結果がtrueである場合──これはより例えば、ファイルが見つかった時、テーブルが見つかった時、エラーが無かった時などなどの場合──だけ後続ジョブエントリーは実行される。
結果がfalseなら後続を実行する([Falseの場合]) ホップの起点となるジョブエントリーの結果がtrueである場合──これはより例えば、ファイルが見つからなかった時、テーブルが見つからなかった時、エラーが発生した時などなどの場合──だけ後続ジョブエントリーは実行される。

          * * *

原典はPentaho Infocenter 5.0のセクション"Build Full-Featured Solutions > Create DI Solutions > Terminology and Basic Concepts"です(2015/06/28取得)。