[Talend] tNormalizeコンポーネントを使ってみた

はじめに

Talendのコンポーネントはたくさんありますが、使ったことないコンポーネントの方が断然多いのです。そこで適当に使ったことないコンポーネントを動かしてみてどんな動きをするのか?を検証してみる 第1段です。
検証バージョンはTalend Open Studio 6.1.0を使っています。

tNormalizeコンポーネント

説明には

機能 SQL標準に従って入力フローを正規化します。
目的 tNormalizeはデータ品質を改善する手助けをしデータを修正します

みたいな感じで書いてあります。さっぱり分かりませんw
ということで実際に使ってみます。

コンポーネントを配置してみる

まずは以下の3つのコンポーネントを使います。

  1. tFileInputDelimited
  2. tNormalize
  3. tLogRow

下記のようにコンポーネントを配置し、関係線を Row > メインでつなぎます。 CMBlog16_1

使用するサンプルテキストは以下です。

ldap,
  db2, jdbc driver,
grid computing,  talend architecture  ,
content, environment,,
tmap,,
eclipse,
database,java,postgresql,
tmap,
database,java,sybase,
deployment,,
repository,
database,informix,java

tFileInputDelimitedコンポーネントをクリックして基本設定を開いて読み込むファイル名のパスを設定します。 CMBlog16_2

次に「スキーマの編集」を行います。(下記のようにCOLUMNにTags、タイプをString、ヌル可にチェックします)

CMBlog16_3

次にtNormalizeコンポーネントをクリックして「カラムの同期」をクリックし、「スキーマの編集」をクリックします。下記のようになっていればOK
CMBlog16_4

次に詳細設定に切り替えて、「出力データの重複を削除」、「一番最後の空の文字は捨てる」、「結果をトリミングする」にチェックを入れます。
CMBlog16_5

最後にtLogRowコンポーネントをクリックしてモード:テーブルを選んでジョブを保存します。 CMBlog16_6

実行してみる

エラーもなく終了しました。
CMBlog16_7_1

が、どうもenvironmentの下にある空白行が出力されていて動きが変です。
本来であれば下記のように出力されるはずなんですけど。

Use_Case_tNormalize5

talendのバージョンが変わって動きが変わったんでしょうか。
しょうがないので一つコンポーネントを追加して期待する動きになるようにジョブを修正します。
tNormalizeコンポーネントの後ろにtFilterRowを配置しtLogRowにフィルターした結果を出力するように修正します
CMBlog16_8

次にtFilterRowの基本設定で「条件の組み合わせに使用する論理演算子」をAndにして条件を下記のように設定します。
CMBlog16_9

あとはジョブを保存して、実行します。
CMBlog16_10

期待する動きが得られました。

まとめ

tNormalizeで指定したデリミタで区切った文字列を比較して、重複は削除し空白を削除することでSQLで言うところのdistinctのような振る舞いをするコンポーネントでした。どういうケースで使うのかイマイチなのですが、存在すると言うことは何れ役立つ時が来ると思っておくことにします。