![[Talend] tNormalizeコンポーネントを使ってみた](https://devio2023-media.developers.io/wp-content/uploads/2015/07/talend.png)
[Talend] tNormalizeコンポーネントを使ってみた
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
Talendのコンポーネントはたくさんありますが、使ったことないコンポーネントの方が断然多いのです。そこで適当に使ったことないコンポーネントを動かしてみてどんな動きをするのか?を検証してみる 第1段です。
検証バージョンはTalend Open Studio 6.1.0を使っています。
tNormalizeコンポーネント
説明には
| 機能 | SQL標準に従って入力フローを正規化します。 |
| 目的 | tNormalizeはデータ品質を改善する手助けをしデータを修正します |
みたいな感じで書いてあります。さっぱり分かりませんw
ということで実際に使ってみます。
コンポーネントを配置してみる
まずは以下の3つのコンポーネントを使います。
- tFileInputDelimited
- tNormalize
- tLogRow
下記のようにコンポーネントを配置し、関係線を Row > メインでつなぎます。

使用するサンプルテキストは以下です。
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コンポーネントをクリックして基本設定を開いて読み込むファイル名のパスを設定します。

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

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

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

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

実行してみる
エラーもなく終了しました。

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

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

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

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

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









