IICS CDI Mapping Designer入門 〜Joiner(結合)編〜

Informatica Cloud Data IntegraionのMappingで使用できるパーツ「Joiner」についての入門記事です。JoinerはSQLでいう「Left Join」などが可能です。

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

どうも!DA部の春田です。

Informatica Cloud Data Integrationでデータ変換処理を構築するためのインターフェイス"Mapping"には、データの変換処理を簡単に実装するための様々なパーツが用意されています。今回は定番パーツ、Joinerについてご紹介していきます!

Joinerでは何ができるのか?

Joinerは、2つのデータソースを共通のカラム情報で紐づけて1つのデータソースに結合するためのパーツです。SQLで言えば、INNER JOINLEFT JOINなどが当てはまり、条件に基づいた結合も可能です。

Informatica Cloud Data Integrationでは、2つのデータソースはMasterDetailに分類されます。SQLではLeftかRightですが、それより少し具体的になった感じですね。パフォーマンス面からMasterにサイズの小さいデータソースを割り当てることが推奨されています。

3つ以上のテーブルを結合する場合は、Designer上でこのJoinerパーツを複数組み合わせて実装します。

事前準備

IICSおよび、Secure Agentの環境は構築できているとします。初めての方は、以下のエントリをご参照ください。

今回は、Redshiftのサンプルデータを拝借します。tickitdb.zipには、結合にちょうど良いデータが格納されているので今回のケースにぴったりです。

クリックで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の左上に付いている+ボタンをクリックします。

MasterDetailという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ではその他の機能についても丁寧にご紹介していきたいとおもいますので、乞うご期待ください!