9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Talend】tMapの便利な機能あれこれ

Posted at

概要

Talendのコンポーネントの中でも基礎中の基礎ともいうべき、「tMap」ですが、その機能は非常に多くイマイチ使い切れていない気がします。
なので「tMap」の機能についてあれこれまとめてみました。

因みに全機能を使い倒すことを推奨しているわけではありません。
便利だからといって何でもかんでもtMapを使うとどこで何の処理をしているかサッパリわからなくなります。

わからなくなりました:innocent:
 
##環境

使用環境 バージョン
OS Windows10
Talend 7.1.1

実装

今回作成したジョブは以下となります。
アウトプットが3つある点についてはtMapの機能に応じてアウトプットを変えるためにそうしています。

■使用コンポーネント
tMap
・tFileInputDelimited
・tLogRow

ジョブ

tMap_1.png

テストデータ

main.csv
ID,姓,名 <--header
1001,佐藤,太郎
1002,鈴木,春子
1003,高橋,次郎
1004,田中,夏子
1005,伊藤,三郎
1006,渡辺,秋子
1007,山本,四郎
1008,中村,冬子
1009,小林,五郎
1010,加藤,六郎
lookup.csv
ID,役職 <--header
1001,マネージャー
1002,リーダー
1003,メンバー
1004,メンバー
1005,リーダー
1006,メンバー
1007,メンバー
1008,メンバー
1009,アルバイト
1011,メンバー

機能① 結合

mainとなるrow1の箱のkey項目をlookupとなるrow2のkey項目の青枠(式キー)にドラッグ&ドロップするだけで結合できます。
また、結合に関する設定はlookup側の箱の上部のスパナマークをクリックして表示される赤枠で囲まれた箇所で設定できます。
tMap_2.png

■結合に関する設定

Property Value 内容
Match Model Unique Match デフォルトの設定。
結合できる対象が複数行あった場合、最後に結合できた1行を結合行として採用して出力する。
First Match 結合できる対象が複数行あった場合、最初に結合できた1行を結合行として採用して出力する。
All Matches 結合できる対象が複数行あった場合、すべてのパターン出力する。
※一般的なRDBの結合と同じ。
すべての行 CROSS JOINを行う。
結合キーの設定は無視される。

なぜ、Join Modelの設定じゃないんだろう。。。
Join Model Left Outer Join デフォルトの設定。
Left Outer Joinでの結合を指定。
Inner Join Inner Joinでの結合を指定。

機能② 入力フィルタ

入力データを処理前にフィルタリングできます。
tMapの前に配置された「tFilterRow」の処理をtMap内で解決できます。

赤枠の矢印マークをクリックすると表示されるテキスト入力ボックスにbooleanが返ってくるように条件を設定。

例) IDのNULL排除
「row1.ID!=null」

tMap_3.png

機能③ マッピング変数

赤枠の[Var] テーブル(変数テーブル)に登録することで処理結果の使いまわしができたり、1次処理をここに記載することで可読性を上げることができます。
tMap_4.png

機能④ 出力フィルタ

出力データをフィルタリングできます。
tMapの後に配置された「tFilterRow」の処理をtMap内で解決できます。

赤枠の矢印マークをクリックすると表示されるテキスト入力ボックスにbooleanが返ってくるように条件を設定。
tMap_5.png

機能⑤ Catch output reject

設定方法

出力フィルタの条件を満たさないデータを出力できます。
想定外の値を持ったデータを本処理とは別に処理させることができます。

青枠のスパナマークをクリックすることで表示される赤枠の「Catch output reject」のValueを「True」にすることで設定。
tMap_6.png

出力結果

役職がアルバイトとなるID=1009のレコードと
外部結合できずに役職がNULLとなるID=1010のレコードが
tLogRow_2(out2)の出力となる。

.----+-----+---------------.
|    tLogRow_1             |
|=---+---------+----------=|
|ID  |氏名     |役職        |
|=---+---------+----------=|
|1001|佐藤 太郎|マネージャー|
|1002|鈴木 春子|リーダー    |
|1003|高橋 次郎|メンバー    |
|1004|田中 夏子|メンバー    |
|1005|伊藤 三郎|リーダー    |
|1006|渡辺 秋子|メンバー    |
|1007|山本 四郎|メンバー    |
|1008|中村 冬子|メンバー    |
'----+-----+---------------'

.----+-----+-------------.
|   tLogRow_2            |
|=---+---------+--------=|
|ID  |氏名     |役職      |
|=---+---------+--------=|
|1009|小林 五郎|アルバイト|
|1010|加藤 六郎|null     |
'----+---------+---------'

.--+----+---.
|tLogRow_3  |
|=-+----+--=|
|ID|氏名|役職|
|=-+----+--=|
'--+----+---'

機能⑥ Catch lookup inner join reject

設定方法

内部結合時に結合できずに落ちたmainのデータを出力できます。
想定外の値を持ったデータを本処理とは別に処理させることができます。

青枠のスパナマークをクリックすることで表示される赤枠の「Catch lookup inner join reject」のValueを「True」にすることで設定。
※緑枠の設定のようにInner Joinで結合しないと出力されない。
※lookupのデータは出力できないので注意。
tMap_7.png

出力結果

inner joinで結合できないID=1010のレコードがtLogRow_3(out3)の出力となる。
また、ID=1010のレコードがtLogRow_2(out2)に出力されていないことからわかるように
Catch lookup inner join reject」で出力できたレコードは「Catch output reject」のみをTrueと設定しても出力されない。

.----+---------+-----------.
|    tLogRow_1             |
|=---+---------+----------=|
|ID  |氏名     |役職        |
|=---+---------+----------=|
|1001|佐藤 太郎|マネージャー|
|1002|鈴木 春子|リーダー    |
|1003|高橋 次郎|メンバー    |
|1004|田中 夏子|メンバー    |
|1005|伊藤 三郎|リーダー    |
|1006|渡辺 秋子|メンバー    |
|1007|山本 四郎|メンバー    |
|1008|中村 冬子|メンバー    |
'----+---------+-----------'

.----+---------+---------.
|   tLogRow_2            |
|=---+---------+--------=|
|ID  |氏名     |役職      |
|=---+---------+--------=|
|1009|小林 五郎|アルバイト|
'----+---------+---------'

.----+---------+----.
|  tLogRow_3        |
|=---+---------+---=|
|ID  |氏名     |役職 |
|=---+---------+---=|
|1010|加藤 六郎|null|
'----+---------+----'

まとめ

tMapの便利な機能について、いくつか記載しました。

ただ、概要でも記載しましたが、便利だからと言ってなんでもかんでもtMapで実装すると
何をやっているかぱっと見ではさっぱりわからない可読性の悪いジョブとなってしまいます。

適切に使えば便利な機能が盛りだくさんなコンポーネントですので活用してみてください。

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?