Informatica Intelligent Cloud Services(IICS)でETL  テーブル結合編

本記事は、
[ジャンルなしオンラインもくもく会 Advent Calendar 2022](https://adventar.org/calendars/7743)の
12日目の投稿です。

**製品**
・Informatica Intelligent Cloud Services(IICS)
のCloud Data Integration(CDI)
ライセンスはトライアルです。
IICSのトライアルは[こちら](https://www.informatica.com/trials.html)から開始できます。

・Snowflake
こちらも無料トライアル版です
Snowflakeのトライアルは[こちら](https://signup.snowflake.com/)から開始できます。

**環境**
InformaticaのSecure Agent
・プラットフォーム：Windows64
・バージョン：64.25

**目標**
CDI上で2つのテーブルを結合し、
データウェアハウスのSnowflakeにロードします。

**素材**
Azure DataLake Storage gen2のサンプルデータ
IICS内で用意されていたので、それを使用します。

テーブルその1
stageCuratedCustomerOrdersテーブル(10列)
中身は、顧客の注文情報のようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/6e660c50-e146-ed5c-d2aa-fdf8beea6193.png)

テーブルその2 
stageCustomersテーブル(3列)
中身は、顧客情報のようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/7f107ea4-77d8-65b0-f5f8-d4228c804df7.png)


**実行手順**
1マッピングを作成

1-1.ソーストランスフォーメーション　を設定
一番左端の2つのADLSgen2が2つのテーブルに対応しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/07b31220-a375-2600-d5b9-0bc9f1f043a9.png)

1-2. ジョイナトランスフォーメーション　を設定 (テーブル結合をする部分)

MasterとDetailの2つの対応づけ先があります。
どちらのテーブルをどちらに対応づけるか？
[公式ドキュメント](https://docs.informatica.com/ja_jp/integration-cloud/cloud-data-integration/current-version/_transformations_cloud-data-integration_current-version_ditamap/GUID-6B4B3465-3C54-4B36-BDDC-6499A95E4D66.html)によると、
>ジョブのパフォーマンスを高めるには、
小さいデータセットを表すトランスフォーメーションを
マスタグループに接続します。

そのため、顧客情報であるstageCustomersをMasterに対応付けしました。

続いて設定。
ジョイナトランスフォーメーション > 受信フィールド
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/2d28d1d4-a65e-f20b-4f93-f87f7fc429bd.png)


2テーブルの間で、カラム名の重複がありますと怒られました。
なので、カラム名を変えてあげます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/9887e28e-672c-1f4a-e019-3b23ffe8ef9c.png)

どう変えるか。
stageCuratedCustomerOrdersテーブルの方のカラム名に
全て冒頭に"Orders_"を付加しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/e0bde365-3182-dfac-89dd-b01598c63730.png)

怒られなくなったので、
次に結合の方法を設定します。
ジョイナトランスフォーメーション > 結合条件
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/f34c0e62-9b55-7616-f61a-3846e6cf1ebd.png)

とりあえずノーマル&簡易にしましたが、
オプションは以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/02fbfaa9-be8b-0ec2-4696-737d525baf63.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/b9765548-72b6-3d27-fe6a-88572aac84d6.png)

CustID(このカラムの中身は顧客ID)のカラム同士を結合します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/c3d87cca-67f5-6ee5-ea84-14b887e5932b.png)

1-3.ターゲットトランスフォーメーション　を設定

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/e5a9f2eb-9052-3828-0a62-32b9d5fc7968.png)

ターゲットトランスフォーメーション > ターゲット > オブジェクト
テーブルが新たに生成されるようにします。→実行時に新規作成
結合後のテーブル名は、JoinerTestTableとしました。
パスは、Snowflakeのデータベース名/スキーマ名　です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/46135aa0-2403-8224-f5be-f46f1bc9c119.png)


Snowflake側の画面。このPUBLICスキーマの下にテーブルが生成される予定です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/61cd51e8-6a3d-6bec-e806-f4bb3c69fa24.png)

これで完成です。

**マッピングを実行**
マッピングキャンバスから、マイジョブに遷移して実行結果を確認します。
成功したようです。326行が処理されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/b9761147-10b3-33c6-09fd-961623680d98.png)

Snowflake側でもJoinerTestTableの生成が確認されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/1c469d2e-178c-0885-6a40-3e1a613956b8.png)

Snowflake側でテーブルをSELECTする権限を付与しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/12c5241c-6354-bbb1-4144-a853110322e7.png)

SELECT文を発行。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/f8c2fb07-42da-c228-d36f-9e4ed2213c1c.png)

表示されました。
3列+10列=13列なので、結合は成功していました。
(顧客IDを表すカラムが2列もありますが…)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/d6cd209a-0cbe-b678-e2dc-6d15e942cbfd.png)

※比較できるよう元テーブルはこちらでした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/b247de21-41da-11a8-f0ba-560c151c8a7f.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1081780/6be7ebe5-4772-0edf-92fb-4c879d2bd7fd.png)

以上です。
拙い記事を読んでくださりありがとうございました！
よいデータ基盤に向けて勉強に励みたいです。

**参考にした情報**
[ジョイナトランスフォーメーション※公式ドキュメント](https://docs.informatica.com/ja_jp/integration-cloud/cloud-data-integration/current-version/_transformations_cloud-data-integration_current-version_ditamap/GUID-6B4B3465-3C54-4B36-BDDC-6499A95E4D66.html)

[Informatica Cloud Data Integration Tutorialのyoutube動画 Joiner Transformation※非公式](https://www.youtube.com/watch?v=WnNFMvJfTtY&list=PL08UduG7NKJJeDONL_IuLGvFbjlmwIUg_&index=10)

[SnowflakeとIICSの接続方法※公式ドキュメント](https://docs.informatica.com/ja_jp/integration-cloud/cloud-data-integration-connectors/current-version/_snowflake-data-cloud-connector_cloud-data-integration-connectors_current-version_ditamap.html)

[Informatica Intelligent Cloud Services（IICS）におけるSnowflakeの利用方法](https://qiita.com/manabian/items/131a25da4a4f89c1ce9b)※manabian様のQiita記事。ありがとうございました。