<< 目次へ
更新日:2015.11.29
複数のテーブルを紐付ける
■インプットの指定
特定の条件にマッチするレコードを抽出するを参照。ただし今回は複数(2つ)のテーブルを紐付ける作業を行うので、今までに使ってきたテストデータ(POS.csv)とは別に 「顧客マスタ.csv」 も読み込んでおきましょう。
CID | 年齢 | 性別 | 会員ランク |
0839 | 23 | 男性 | ゴールド |
0562 | 57 | 女性 | 普通 |
0585 | 77 | 男性 | 普通 |
0656 | 25 | 男性 | シルバー |
9999 | 25 | 女性 | 普通 |
1255 | 38 | 女性 | ゴールド |
2633 | 72 | 男性 | ブロンズ |
■処理の指定
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になっていないとエラーが出てしまいます。