IICS CDI Mapping Designer入門 〜Joiner(結合)編〜
どうも!DA部の春田です。
Informatica Cloud Data Integrationでデータ変換処理を構築するためのインターフェイス"Mapping"には、データの変換処理を簡単に実装するための様々なパーツが用意されています。今回は定番パーツ、Joinerについてご紹介していきます!
Joinerでは何ができるのか?
Joinerは、2つのデータソースを共通のカラム情報で紐づけて1つのデータソースに結合するためのパーツです。SQLで言えば、INNER JOIN
やLEFT JOIN
などが当てはまり、条件に基づいた結合も可能です。
Informatica Cloud Data Integrationでは、2つのデータソースはMasterとDetailに分類されます。SQLではLeftかRightですが、それより少し具体的になった感じですね。パフォーマンス面からMasterにサイズの小さいデータソースを割り当てることが推奨されています。
3つ以上のテーブルを結合する場合は、Designer上でこのJoinerパーツを複数組み合わせて実装します。
事前準備
IICSおよび、Secure Agentの環境は構築できているとします。初めての方は、以下のエントリをご参照ください。
今回は、Redshiftのサンプルデータを拝借します。tickitdb.zip
には、結合にちょうど良いデータが格納されているので今回のケースにぴったりです。
解凍したデータをSecure Agent内に配置し、IICSからFlat Fileとして読み取るコネクションを作成します。
これで事前準備はOKです!
実際に使ってみた!
まずは左メニューバーの「New」をクリックして、Mappingを新規作成します。
Mappingデザイナーの画面が表示されたら、Sourceの設定を行います。今回は2つのデータを結合したいので、用意するSourceは2つです。デフォルトでは1つしかSourceがデザイナーないに配置されていないので、左のパレットからドラッグ&ドロップして追加してください。
まずは上のSourceから設定していきます。こちらにはallusers_pipe.txt
を持ってくるので、Sourceの名前はSales
としておきましょう。元のデータはパイプ区切り、ヘッダなし、クオートなしなので、Formatting Options
をクリックしてデータのフォーマットを指定します。
カラム名とデータ型は、RedshiftドキュメントのDDLを参考にFieldsタブから手入力します。
下のSourceには、sales_tab.txt
を同様に設定していきます。こちらはタブ区切り、ヘッダなし、クオートなしなので、Formatting Options
は以下のようになります。
カラム名とデータ型は以下の通りです。
これでSourceの準備は完了です。続いて、左パレットからJoinerをドラッグ&ドロップして追加します。その後、SalesからTargetへ伸びている矢印を選択し、右上のゴミ箱マークをクリックして一旦消去してください。
2つのソースをJoinerで結合していくので、わかりやすいように並べ直してみてください。その後、Joinerの左上に付いている+ボタンをクリックします。
Master
とDetail
というSourceからの接続先が表示されたかと思います。Sourceの右に付いている三角形から矢印をドラッグして引っ張り出し、UsersはMaster
、SalesはDetail
に繋いでください。
すると、Incoming Fields
に接続したテーブルの情報が表示されるようになります。使用する行のみ事前に絞り込んでおきましょう。
その後、結合方式を以下の4種類から選択します。
- Normal Join
- SQLでいうINNER JOIN
- 条件に合致するカラムのみ結合して出力する。それ以外は除外。
- Master Outer
DetailをRight、MasterをLeftとすれば、SQLでいうLEFT JOIN- → DetailをLeft、MasterをRightとすれば、SQLでいうLEFT JOIN
- ※2022年3月26日訂正。ご指摘ありがとうございます。
- Detailの全行とMasterの条件にマッチした行を結合して出力する。条件にマッチしなかったMasterの行は除外
- Detail Outer
DetailをRight、MasterをLeftとすれば、SQLでいうRIGHT JOIN- → DetailをLeft、MasterをRightとすれば、SQLでいうRIGHT JOIN
- ※2022年3月26日訂正。ご指摘ありがとうございます
- Masterの全行とDetailの条件にマッチした行を結合して出力する。条件にマッチしなかったDetailの行は除外
- Full Outer
- SQLでいうFULL OUTER JOIN
- 条件にマッチした行は結合して出力し、それ以外の行もすべて出力する
データウェアハウスでは通常、第2正規形を維持するよう意識しているかと思いますが、それになぞればUser
のMasterがディメンションテーブル、Sales
のDetailがファクトテーブルに当てはまりますね。
さて、今回はMaster Outer
を選択して、Sales
の各行にUsers
にあるユーザー情報を紐づけてみます。各セールス記録に対して、売り手が誰なのかを見るために、userid = sellerid
で結合しましょう。
デザイナー上でJoinerをTargetに接続した後、Preview
をクリックして中身を確認してみましょう。こんな感じに出力されるはずです。
ちなみにAdvanced
のタブでは、Nullの順番やキャッシュサイズの調節などが可能です。「こうできたらいいな〜」というのがあれば、事前に確認しておくべき項目でしょう。
最後に
Joinerはかなりシンプルに作られている機能だなと実感しました。データETL初心者にも手触りで扱いやすいのではないかなと思います。
Developers.IOではその他の機能についても丁寧にご紹介していきたいとおもいますので、乞うご期待ください!