
IICS CDI Mapping Designer入門 〜Normalizer(ノーマライザ)編〜
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
どうも!DA部の春田です。
Informatica Cloud Data Integrationでデータ変換処理を構築するためのインターフェイス"Mapping"には、データの変換処理を簡単に実装するための様々なパーツが用意されています。今回はデータ変換の中でも特徴的なパーツ、Normalizerについてご紹介していきます!
Normalizerでは何ができるのか?
Normalizerは、複数のカラムをユニークキーで付与しながら1つのカラムのデータとしてまとめること(正規化)ができる機能です。例えば、一つのStoreで四半期の売上が別カラムになっているテーブルを
| StoreNo | Q1 | Q2 | Q3 | Q4 | Year |
|---|---|---|---|---|---|
| 1001 | 30 | 50 | 48 | 80 | 2014 |
| 1022 | 100 | 120 | 125 | 140 | 2014 |
| 1190 | 80 | 108 | 123 | 134 | 2014 |
このように1カラムにまとめることができます。データの前処理で重宝するパーツですね。
| StoreNo | QuarterlySales |
|---|---|
| 1001 | 30 |
| 1001 | 50 |
| 1001 | 48 |
| 1001 | 80 |
| 1022 | 100 |
| 1022 | 120 |
| 1022 | 125 |
| 1022 | 140 |
| 1190 | 80 |
| 1190 | 108 |
| 1190 | 123 |
| 1190 | 134 |
さて、実際に使っていきましょうか!
事前準備
IICSおよび、Secure Agentの環境は構築できているとします。初めての方は、以下のエントリをご参照ください。
今回も、Redshiftのサンプルデータを拝借します。tickitdb.zipをダウンロードし、解凍したデータをSecure Agent内に配置してください。
IICSからFlat Fileとして読み取るコネクションを作成します。

これで事前準備はOKです。
実際に使ってみた!
まずは左メニューバーの「New」をクリックして、Mappingを新規作成します。


Mappingデザイナーの画面が表示されたら、Sourceの設定を行います。Objectにsales_tab.txtを選択し、以下のようにFormatting Optionsを設定してください。


サンプルデータにはヘッダがないので、カラム名はFieldsタブから手入力してください。ついでにデータ型もいい感じに合わせておきましょう。

Sourceの設定が終わったら、デザイナー左のパレットからNormalizerを選択し、SourceとTargetの間へドラッグ&ドロップします。

Normalizerの主要タブは2つ、Normalized FieldsとField Mappingです。Normalized Fieldsでは期待する出力のカラムを定義し、Field Mappingでは入力カラムと出力カラムを紐付けます。

今回は試しに、idと名のつくカラムを全部まとめてみましょう(実際にはほとんどやらない変換だとはおもいますが)。Normalized Fieldsタブをクリックし、右上のCreate FieldからSelect From Incoming Fields...をクリックしてください。

まずは正規化を行わないカラムの情報をそのまま引き継がせます。commissionとsaletimeのみを選択し、OKをクリックします。

続いて、正規化を行った後のカラムを作成するために、Create FieldからNew Fieldをクリックしてください。

正規化後のカラム名はIdsとでもしておきます。Normalizerでは、Typeはstringとnumberの2種類しか選べない点にご注意ください。

Idsが追加されたらOccursを修正します。Occursとは、正規化対象となるカラムの数を指します。今回はid系のカラム計8つを正規化するので、Occursは8です。

Occursが2以上になると、自動的に新しく2つのカラムが追加されます。

GCID_Idsは正規化前の元々のカラムと紐づけられて割り振られるIDで、一方GK-Idsは1レコードずつ順番に付与されるIDです。先ほどの例で言うと、こんな値が割り振られます。地味にありがたい機能です。
| StoreNo | QuarterlySales | GCID_Ids | GK-Ids |
|---|---|---|---|
| 1001 | 30 | 1 | 1 |
| 1001 | 50 | 2 | 2 |
| 1001 | 48 | 3 | 3 |
| 1001 | 80 | 4 | 4 |
| 1022 | 100 | 1 | 5 |
| 1022 | 120 | 2 | 6 |
| 1022 | 125 | 3 | 7 |
| 1022 | 140 | 4 | 8 |
| 1190 | 80 | 1 | 9 |
| 1190 | 108 | 2 | 10 |
| 1190 | 123 | 3 | 11 |
| 1190 | 134 | 4 | 12 |
さて、正規化前後のカラム情報をマッピングしていきましょう。Field Mappingのタブをクリックすると、以下の2つのテーブルが表示されます。カラムのマッチングを行うには、右上のAutoMatchをクリックするのですが、マッチングの方法としてExact Field NameとSmart Matchの2種類があります。

- Exact Field Name: 正規化前と後のテーブルで、同じ名前のカラムを自動的に紐付ける。
- Smart Match: 同じ接頭辞などのカラムを自動的に紐付ける。
今回は、commissionとsaletimeはExact Field Nameで紐付けられます。SmartMatchの方はダメでした。この辺り自動でやりたい場合は、カラム名を調節しておく必要がありますね。Exact Field Nameをクリックすると、以下のように紐付けられます。

残りは、左テーブルのカラムを正規化先の右テーブルのカラムへドラッグ&ドロップしましょう。

こんな感じに1対1に紐づけたら、Previewで中身を確認してみましょう。


期待通りの結果になりましたね。NormalizerのAdvancedタブにはほとんどオプションがないので、使い道としてはこれくらいです。
最後に
Normalizerはシンプルながらも、データの前処理段階で活躍してくれそうな機能ですね!ETL実装時にはぜひチェックしておきましょう。
Developers.IOではその他の機能についても丁寧にご紹介していきたいとおもいますので、乞うご期待ください!






