<< トップページへ

<< 目次へ

更新日:2015.11.29

複数のテーブルを紐付ける



■インプットの指定

特定の条件にマッチするレコードを抽出するを参照。ただし今回は複数(2つ)のテーブルを紐付ける作業を行うので、今までに使ってきたテストデータ(POS.csv)とは別に 「顧客マスタ.csv」 も読み込んでおきましょう。


CID 年齢 性別 会員ランク
0839 23 男性 ゴールド
0562 57 女性 普通
0585 77 男性 普通
0656 25 男性 シルバー
9999 25 女性 普通
1255 38 女性 ゴールド
2633 72 男性 ブロンズ
顧客マスタ.csv


■処理の指定

talendで複数のテーブルを紐付けするためには 「tJoin」 を使います。しかしここからの作業は少し複雑になるので、落ち着いてこれ以降に続く説明を丁寧に読んでください

少し説明の順序が前後してしまいますが、先に「最終的なリレーション図」を確認しておきましょう。まずインプットにはtestDataCustM(今回、新たに読み込んだ顧客マスタ)とtestDataPOSの2つがあります。そして処理にはtJoinをおき、出力用のjoinTableをおいています。出力の部分にあるjoinTableは事前に設定しておく必要があります(後に記述されているアウトプットの指定を参考にしてください)。

ここで注目して欲しいのが、インプット(testDataCustM、testDataPOS)と処理(tJoin)をつなぐ線です。testDataCustMからのびている線は実践で「Main」と表示されています。一方でtestDataPOSからのびている線は点線で「Lookup」と書かれています。これは 「顧客マスタを基準(メイン)テーブルとして、POSを紐付ける(Lookup=拾い上げる)」ということを意味しています。つまりLeftJoin(片側結合、左部結合)というやつです。もちろん指定の方法によってInnerJoin(両側結合)も行うことが可能です(これについても後述します)。

ここから処理の具体的な説明をしますが、まず下図のようなリレーションを組んでおいてください(先にアウトプットの指定の部分を読んでから読み進めてください)。



それでは具体的な説明に入ります。下に実際の画面をとっていますので、それを見ながら説明を読んでください。

上から順に、まずは 「出力に参照カラムを含む」 の部分にチェックを入れてください。参照カラムとは、今回の場合ではtestDataPOSのことです(Lookupでつなげられているテーブル)。すると 「カラムマッピング」 というウィンドウが編集可能なかたちであらわてきます(これをチェックしないと表示されません)。

右側に表示されている 「参照カラム」 がPOS側に含まれているカラム(変数名)ですので、出力させたいものを選んでください。そして左側に表示されている 「出力カラム」 が書き出されるアウトプットファイル(下のアウトプットの指定で用意した空のファイル)のどこに出力するかの指定をする場所です。なお今回はCIDは出力しないようにしています(顧客マスタ側にあるため)。

つづいて 「キー定義」 の部分です。これが紐付けキーをどれとどれにするかを指定するところで、ここには 「入力キー属性」 と 「参照キー属性」 の2つがあります。入力キー属性が今回の例でいえば顧客マスタ側(Main)の紐付けキーです。参照キー属性はPOS側(Lookup)の紐付けキーです。今回はCIDを紐付けキーとして2つのテーブルを紐付けるので、図のような設定にしています。

もしもInnerJoin(両側結合)にしたい場合は、画面の一番下にある 「Inner join」 にチェックを入れればできるはずです。



■アウトプットの指定

アウトプットの指定について、改めて基本を述べておきますと「処理によって自分がどういうテーブルを得たいか」を自分自身で理解し、その形式を用意しておくことが必要です。つまり今回の場合は顧客マスタの全カラムの隣に、POSデータにある全カラムを横に紐付けるということがしたいのですから、出力カラムは下図のような空のテーブルを用意することになります。


【注意】 上のスクリーンショットではカンマ(,)の後にスペースが入っているように見えますが、これは私が使っているテキストエディタの仕様上 「このように表示される」 だけで、実際にはスペースは入っていません。なお、POSデータにある全カラムと前述していますが、CIDはあっても仕方がないので、除いています。


これをtalend上で、以下のように読み込み設定しておきます。これで準備完了です。


【注意】 インプット側とアウトプット側とで「データ型が一致している必要がある」ということを忘れないでください。つまり、インプット側(testDataPOS)の点数や金額がIntegerになっている場合、出力側(joinTable)の点数や金額も同じくIntegerになっていないとエラーが出てしまいます。