11
6

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入門 (4) ~tMap~

Last updated at Posted at 2019-04-07

##全体の目的
Talendの超簡単なサンプルジョブを作成して,ETLジョブ開発に必要なスキルを習得することが目的です。

##対象者
ETL / EAI技術者

##環境

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

##サンプル一覧
以下の順番で習得していきます

# 内容
1 はじめてのTalend
2 ファイルI/O
3 データベースI/O
4 tMap(今回)
5 イテレータ
6 メタデータ
7 Context変数
8 Global Map
9 tHashInput/tHashOutput
10 エラーハンドリング
11 ロギング
12 子ジョブ(ジョブのネスト)
13-1 設定ファイル読み込みオリジナル版
13-2 設定ファイル読み込みコンポ版
14 tJava

サンプルコード(Talendプロジェクトデータ)

##今回の目的
tMapの使い方を覚える

##サンプルプログラム概要
従業員マスタに部門マスタを引き当てるプログラムを作ってみます。

##tMapを使った変換・加工 (Transform)
2つの入力ソース(従業員マスタと部門マスタ)をどのように結合していくかを確認していきます。

入力ソース定義

それではサンプルジョブを作成していきましょう。
リポジトリの[ジョブ]を右クリックし[ジョブの作成]を選択します。
[名前]に"trans"と入力し[Finish]ボタンをクリックします。

GS000098.png

一つ目の入力ソースとして従業員マスタを想定した[tFixedFlowInput]コンポーネントを配置します。
GS000099.png

[tFixedFlowInput]の[基本設定]の[スキーマ編集]ボタンを押下しカラム定義画面を開きます。
カラム名とタイプを以下のように設定します。

カラム タイプ
1列目 id int
2列目 name String
3列目 department_code String

GS000100b.png

[tFixedFlowInput]の[基本設定]のモード設定で[インラインコンテンツの使用]を選び以下設定します。

項目名 設定内容 説明
フィールド区切り , 入力データはcsv定義
コンテンツ 下記emp.csvを張り付ける csvファイルの代わりをここで定義できる
emp.csv
1,kouda,02
2,mori,01
3,kubo,01
4,kimura,99
5,kinosita,99

GS000101.png

二つ目の入力ソースとして部門マスタを想定した[tFixedFlowInput]コンポーネントを配置します。
GS000102.png

[tFixedFlowInput]の[基本設定]の[スキーマ編集]ボタンを押下しカラム定義画面を開きます。
カラム名とタイプを以下のように設定します。

カラム タイプ
1列目 department_code String
2列目 department_name String

GS000103.png

[tFixedFlowInput]の[基本設定]のモード設定で[インラインコンテンツの使用]を選び以下設定します。

項目名 設定内容 説明
フィールド区切り , 入力データはcsv定義
コンテンツ 下記department.csvを張り付ける csvファイルの代わりをここで定義できる
department.csv
01,sales
02,develop
03,planning
04,purchasing
05,general
06,accounting

GS000105.png

外部結合

[tMap]コンポーネントを配置し従業員マスタとして定義した[tFixedFlowInput]をロウでつなぎます。
※最初につなぐことでメインロウという扱いになります。

GS000106.png

次に部門マスタとして定義した[tFixedFlowInput]を[tMap]にロウでつなぎます。
※2番目以降に接続したロウは全てルックアップロウという扱いになります。

GS000107.png

結合設定

[tMap]コンポーネントをダブルクリックすることで編集画面が開きます。

GS000108.png

row1のdepartment_codeをrow2のdepartment_codeの式キーにドラッグ&ドロップします。
これでSQLでいうところのLEFT JOINした状態となります。

GS000108c.png

[出力テーブルの追加]ボタン(画面の+ボタン)をクリックします。

GS000108d.png

output追加ダイアログでout1という名前で新しいoutputを作成します。
GS000109.png
GS000110.png

row1とrow2のColumnをそれぞれout1の式にドラッグ&ドロップします。ここまで出来たらOKでダイアログを閉じます。
GS000111a.png

出力確認用の[tLogRow]を配置します。
[tLogRow]の[基本設定]にある[モード]もテーブルにしておきましょう。
GS000112.png

[tMap]と[tLogRow]をつなぐには[tMap]で右クリックをして先ほど作成したout1を選択したうえでつなぎます。
GS000112a.png
GS000113.png

設定は完了ですので実行してみます。
department_codeを結合キーとしてdepartment_nameの引き当てができました。
GS000114.png

内部結合

先ほどの結果だとdepartment_nameがnullのデータができていました。
今度は内部結合になるように設定してみましょう。

結合設定

[tMap]コンポーネントをダブルクリックし編集画面が開きます。
row2にある赤枠で囲った[tMap settings]をクリックします。
GS000114b.png

設定項目の[Join Model]を[Inner Join]に変更します。
GS000118.png

これでSQLでいうところの内部結合(INNER JOIN)した状態となります。
GS000119.png

設定は完了ですので実行してみます。
department_nameの引き当てができたデータのみが出力できました。
GS000120.png

アンマッチデータの処理

引き当てができなかったデータを処理する方法を説明します。

[tMap]コンポーネントをダブルクリックし編集画面が開きます。
[出力テーブルの追加]ボタン(画面の+ボタン)をクリックします。
GS000122.png

output追加ダイアログでout2という名前で新しいoutputを作成します。
GS000123.png
GS000124.png

row1のColumnをそれぞれout2の式にドラッグ&ドロップします。
※row2のdepartment_nameは引き当てできないので設定しません。
GS000125b.png

out2にある赤枠で囲った[tMap settings]をクリックします。
GS000130.png

[Catch lookup inner join reject]をtrueに設定します。
ここまで出来たらOKでダイアログを閉じます。
GS000132b.png

出力確認用の[tLogRow]を配置します。
[tLogRow]の[基本設定]にある[モード]もテーブルにしておきましょう。
GS000127.png

[tMap]で右クリックをして先ほど作成したout2を[tLogRow]とつなぎます。
GS000127a.png
GS000128.png

それでは実行してみましょう。
内部結合できなかったデータを処理することができました。

.--+-----+---------------+---------------.
|               tLogRow_1                |
|=-+-----+---------------+--------------=|
|id|name |department_code|department_name|
|=-+-----+---------------+--------------=|
|1 |mori |01             |sales          |
|2 |kubo |01             |sales          |
|3 |kouda|02             |develop        |
'--+-----+---------------+---------------'

.--+--------+---------------.
|         tLogRow_2         |
|=-+--------+--------------=|
|id|name    |department_code|
|=-+--------+--------------=|
|4 |kimura  |99             |
|5 |kinosita|99             |
'--+--------+---------------'

マッピング変数

最後にマッピング変数の使い方を見ておきましょう。

マッピング変数はtMapの処理において変数として処理を定義することで使いまわしができるものです。

[tMap]コンポーネントをダブルクリックし編集画面が開きます。
真ん中のVarのところにある[変数の追加]ボタン(画面の+ボタン)をクリックします。
GS000133.png

今回は従業員名を大文字変換した値を保持する変数を定義してみます。
式に以下コードを記入します。

StringHandling.UPCASE(row1.name)

GS000136.png

out1とout2に定義した変数var1をドラッグ&ドロップし出力カラムとして追加します。ここまで出来たらOKでダイアログを閉じます。

GS000137b.png

「変更を反映しますか」ダイアログが表示された場合はYesで反映します。
GS000138.png

それでは実行してみましょう。
従業員名を大文字変換したカラムを追加できました。

.--+-----+---------------+---------------+-----.
|                  tLogRow_1                   |
|=-+-----+---------------+---------------+----=|
|id|name |department_code|department_name|var1 |
|=-+-----+---------------+---------------+----=|
|1 |mori |01             |sales          |MORI |
|2 |kubo |01             |sales          |KUBO |
|3 |kouda|02             |develop        |KOUDA|
'--+-----+---------------+---------------+-----'

.--+--------+---------------+--------.
|             tLogRow_2              |
|=-+--------+---------------+-------=|
|id|name    |department_code|var1    |
|=-+--------+---------------+-------=|
|4 |kimura  |99             |KIMURA  |
|5 |kinosita|99             |KINOSITA|
'--+--------+---------------+--------'

##まとめ
今回はtMapの使い方を確認しました。
ETL処理でいうところのいわゆる Transform(変換・加工)の基本的な設定方法が分かってもらえたのではないでしょうか。
あらたに利用したコンポーネントと用途をおさらいしておきます。

  • tMap
    • マップエディタ

毎度のことですが、ほんのさわりの部分だけを解説していますのでぜひここから深掘りしてみてください。

##次回以降
次回はイテレータをやっていきます。

11
6
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
11
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?