[IDMC]別のマッピングに特定の値を受け渡す(InOutパラメータ編)

## はじめに
Informatica Intelligent Data Management Cloud(IDMC/旧称IICS)でのちょっとしたTipsを纏めていきます。日々の活動の中で検証した結果記録であり、忘れやすい自分のためのメモですが、少しでも皆様のお役に立てればと思い公開していきます。記述方法など試行錯誤しており随時更新するかもしれません。

## この記事のゴール：IDMC データ統合でマッピング間のデータ受け渡しが出来るようになる
マッピング間のデータの受け渡しが出来るといろいろな場面で利用が出来るかもしれません。例えば、ログ出力用共通マッピングタスクがあり、そのログ出力タスクに対してどのマッピングのどのデータタスクでエラーが発生したかを引き渡してログ出力したい、等。

今回はソースAから取得したデータをキーとして、別のマッピングにて別のデータベースのデータを取得すると言う検証をしてみました。

尚この記事の内容は、R43 で検証しています。

## 具体的な手順
今回実現した処理のイメージは以下の通りです。
- 1つめのマッピングでOracleのDept表から該当のDeptNoを抽出。
- 1つめのマッピングのIn Outパラメータに抽出したDeptNoをセット。
- タスクフローで2つめのマッピングのIn Outパラメータに 1つめのマッピングでセットされたIn Outパラメータの値を渡す。
- 2つめのマッピングでIn Outパラメータを元にSQLServerのEmp表から該当DeptNoのデータを抽出する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/5124150e-70bb-d1ed-bf59-9f9265c20947.png)

では既に作成した処理(マッピング、マッピングタスク、タスクフロー)を順を追って説明いたします。

### 1. マッピング01
#### 1-1. In Out パラメータを作成
任意の名称のマッピングを作成したら、パラメータパネルを表示させ、”入出力パラメータ"の新規追加(＋ボタン)をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/01fbe152-43e3-47c2-8bed-91b418b4e628.png)
以下の設定でIN Outパラメータを設定します。今回は値が文字列だったのでstringを選んでいます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/faf91d16-af54-8db9-b9cf-5a4f4ed61fa4.png)
#### 1-2. In Out パラメータに値を設定
マッピングでの各処理は以下の通り。
2番目の式トランスフォーメーションで、DeptNoのリストを作成します。例えば今回はソーストランスフォーメーションから条件によってDeptNoが 10,10,20,20,20 のような複数の行として引き渡されるとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/08a5bfd6-74fc-d3d9-b191-3a291b27be68.png)
以下のような変数を駆使した処理にてDeptNoをカンマ区切りのリスト化し、最後に o_deptnolist というstring型の出力を後続のトランスフォーメーションに渡します。今回は”10,20"という形でカンマ区切りの文字列が作成され後続に引き渡されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/7ab1ab16-2094-b4bf-a83c-568b0311e04b.png)
3番目の式トランスフォーメーションで、前段で取得し引き渡された o_deptnolist の値をIn Outパラメータ inout_deptnolistに設定しています。
In Outパラメータへ値を設定するにはSetVariable関数を利用します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/c2f0e145-bdf5-9a1a-a7b3-b148f41278dc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/3b03e2a0-ff20-d472-16a0-ccfea30a7fd6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/da51d2a2-854b-77c0-a311-4de19276b0ce.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/455afd26-5fa9-31e7-d66c-48ffa31adde4.png)
これで、マッピング02に値を引き渡すための準備は出来ました。ターゲットの処理はダミー処理のため詳述しませんが、デバッグ用にo_deptnolistをフラットファイルに出力する処理としています。この検証では出力した値は特に利用しませんのでぶっちゃけ何を出力してもよし。マッピングが正常に保存・実行出来ればOKです。
以上で1つめのマッピングが完成したので、マッピングタスクも作成しておきます。マッピングタスクには特に設定すべき内容はないのでそのまま作成しましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/fd9f3f41-c8d6-1879-5917-fa4299b37eb8.png)
### 2. マッピング02
#### 2-1. In Out パラメータを作成
マッピング01と同様にIn Out パラメータを作成します。名前はm01のパラメータと区別するため inout_deptnolist_m02 としました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/955b91ff-6216-7542-4eed-e59b69bc7d2d.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/860c9b4c-f4e8-ff27-7d24-3c67490fb09f.png)
#### 2-2. In Out パラメータを元にソースデータのフィルタリング設定
作成したIn Outパラメータを利用してソースデータのフィルタを設定することにします。マッピング01で作成し引き渡される筈のDeptNoのリストを、クエリオプションの”フィルタ”に設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/a12732b9-d79f-1003-efcb-f76f863f0662.png)
in句の中身として以下のように記入します。実行時にはパラメータが引き渡され、例えば” EMP.DEPTNO in (10, 20)" のように展開されてソースデータをフィルタ出来ます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/dccd85e3-8702-935c-cf47-f98eea22e869.png)
#### 2-3. フィルタされたデータの出力
ターゲットトランスフォーメーションではフィルタリングされた情報をcsvとして出力します。この処理も詳述しませんが、単純に渡された情報を全てターゲットとして出力しています。
以上で2つめのマッピングも完成したので、マッピングタスクも作成しておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/6569262b-ff29-2009-5487-077593afd591.png)
### 3. タスクフロー
最後にタスクフローにしてパラメータの引き渡し処理を設定します。タスクフローを作成し、データタスクを2つ設定、それぞれ作成済みのマッピング01(のマッピングタスク)とマッピング02(のマッピングタスク)を呼び出す設定とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/0c8359dd-baef-738d-acab-947fbfeadd1d.png)
ここで設定すべき内容は1つだけ。マッピングタスク02の入力フィールドに存在する”inout_deptnolist_m02"(マッピング02で設定したIn Outパラメータ)に、マッピング01で設定されたIn Outパラメータ”inout_deptnolist"を代入する設定を行います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/5f3010dc-aef3-2ca7-5613-70a9f2956333.png)
具体的には、以下のように、鉛筆アイコンをクリックしEdit画面を開き、
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/46d6cd65-7e0e-002a-8faf-090b3ed0e14c.png)
コンテンツを選択して右下の(x)ボタンをクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/82d4c59f-5f74-ea5e-29dc-0f559ba3c7f6.png)
検索ウィンドウで、マッピング01 の InOut Parameters を展開し、表示される”inout_deptnolist"をクリックし、式が設定されたら”OK”。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/8fa27532-edfe-b434-cbe4-994facfc4d24.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/47286103-2b61-073d-b40b-2f4048877ffe.png)
タスクフローの設定はこれで終了。保存して実行してみましょう。

### 実行結果
正常に実行が完了しました。マッピング02ではちゃんとinout_deptnolist_m02に値を受け取れています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/6ec8c64f-f1d1-fe1f-6564-913e8654abac.png)
結果ファイルも見てみます。DEPTNOが10と20のEMPデータが抽出できましたので、パラメータの受け渡しが成功しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2985453/b1240c0e-9f6e-8a9e-7ef6-c2e862b5176b.png)


以上、検証結果を記述してみました。何かのお役に立てば幸いです。