IICS CDI Mapping Designer入門 〜Aggregator (集約関数)編〜

Informatica Cloud Data IntegraionのMappingで使用できるパーツ「Aggregator」についての入門記事です。AggregatorはSQLでいう「SUM」や「AVG」などに値します。

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

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

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

Aggregatorでは何ができるのか?

Aggregatorは、「平均」や「合計」といったデータの集約関数が用意されているMapping用のパーツです。単に入力されたデータを集約関数へ流すだけでなく、SQLでいうGROUP BYのような値の種類に応じた集計も可能となっています。

グループごとの集計を行う際には、事前にデータをソートしておくことが推奨されています。デフォルトでは全てのデータをスキャンしてから集計を行うようになっていますが、ソート済みのデータが入力される場合、後ほどご紹介するパラメータを設定することで集計処理の高速化が期待できます。

使用できる関数は、大きくわけて13種類用意されています。

Function overview | Informatica Online Help

  • Aggregate: 値のサマリや統計値を求める
  • Conversion: データの型変換を行う
  • Data Cleansing: 値の整形や文字列の操作を行う
  • Date: 日付データのフォーマット変更や比較、計算を行う
  • Encoding: データの暗号化や圧縮、エンコーディング
  • Financial: 金融系でよく使われる定番関数
  • Horizontal Expansion: より高度な関数を定義するための拡張関数
  • Numerical: 数値データを扱うための関数
  • Scientific: sin、cos、tanなどの三角関数
  • Special: エラー出力や動的変数のセットを行う
  • String: 文字列データを扱うための関数
  • Test: 真偽値を返す関数
  • Window: SQLのWindow関数のような高度関数

様々な種類の関数があるわけですが、今回は基本統計量のAVG、STDDEV、MEDIAN、MAX、MIN、SUM、COUNT辺りを算出していきます。

事前準備

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

今回は、COVID19のオープンデータを使用します。enigma-jhu/csv/Enigma-JHU.csv.gzは世界のコロナウィルス感染者数に関する時系列データです。

クリックでEnigma-JHU.csv.gzをダウンロード

このデータをSecure Agent内に配置し、IICSからFlat Fileとして読み取るコネクションを作成します。

これで事前準備はOKです!

実際に使ってみた!

まずは左メニューバーの「New」をクリックして、Mappingを新規作成します。

Mappingデザイナーの画面が表示されたら、先にSourceの設定を行います。先ほど作成したコネクションを指定して、ロードするデータEnigma-JHU.csv.gzを指定し、一旦保存します。

Sourceの設定が完了したら、デザイナー左のパレットから、Aggregatorをドラッグし、SourceとTargetの間にドロップします。Sourceから出力されるデータを、このAggregatorで集約していきます。

Aggregatorの設定項目は大きく5つあります。

  • General: Aggregatorの名前や説明を記入できる
  • Incoming Fields: Sourceから流れてくるデータを事前に制御する
  • Group By: カラムの値ごとに集計する
  • Aggregate: 集約関数を適用したカラムを作成する
  • Advanced: 細かい詳細設定

まずは使用するカラムを絞ります。Incoming Fieldsをクリックし、Field RulesのField Selection Criteria列でデフォルトになっているAll FieldsNamed Fieldsに変更し、カラム名で扱うカラムを絞ります。

カラムの指定には、Detail列のConfigureをクリックしてください。

表示されたポップアップからカラムを指定します。今回は国でGroup Byをかけて、感染者数に対して集計をかけてみようと思います。confirmedcountry_regionにチェックを入れてください。

OKボタンを押してポップアップを閉じると、指定したカラムのみが表示されるようになります。ここで気づくことは、confirmedは数値データであるはずなのに、string型になってますね。CSVファイルはとりあえず全てstring型として認識されるため、集計をかける前に、型を変換しておく必要があります。

一旦Sourceに戻り、FieldsOptionsからEdit MetadataのチェックマークをONにして、スキーマ情報の変更を行いましょう。今回はconfirmedint型に変更するだけです。

再びAggregatorに戻りFields情報を見れば、confirmedのデータ型がintegerに変更されていることが確認できました。

続いて、Group Byするカラムを指定します。Group by Fieldsの右上にある+ボタンをクリックし、country_regionを追加してください。

さて、本題の集約関数カラムの作成に入ります。Aggregateの右端にある+ボタンをクリックします。

新しいカラムを設定するポップアップが表示されます。今回は、AVG、STDDEV、MEDIAN、MAX、MIN、SUM、COUNTの7つを作成します。

7カラム追加したら、Configureをクリックして集約関数を定義していきます。

ポップアップが表示されました。まずはドロップダウンリストからBuild-in functionsを選択し、使用する関数を選択しましょう。

今回使う集約関数は全て、Aggregateの中に括られています。Avgをクリックすると、右側のフォームに関数が追加されます。

続いて、ドロップダウンリストからFieldsを選択し、confirmedをクリックして右側のフォームにカラム名を追加します。

右フォーム内の関数を整形し、Validateをクリックしてテストが通ればOKです。

これを他5つの集約関数カラムに対しても同様に設定していくと、以下のようになるかと思います。一回Previewしてみます。

Run Previewをクリックすると、「保存が必要です」というようなポップアップが表示されるのでYesをクリックします。

Preview用の設定画面が表示されます。デフォルトは先頭100カラムのみの集計になっているので、これを本データのレコード数222,804に変更して集計をかけます。

こんな感じで出力されましたね。Group Byしたカラムと追加した7つの集約関数カラムの他に、集計対象のconfirmedも出力されていますね。この挙動はSQLに慣れ親しんでいる方からしたら少し違和感があるかと思いますが、値を比較した感じ、Group Byにしていないカラムは全てMAX値を取って出力されるようですね。

ちなみに、Advancedで設定できる項目は以下の通りです。ソート済みのデータに対して高速に集計したい場合は、Sorted Inputのチェックボックスを入れてください。

最後に

Aggregatorの特徴としては、かなり細かく集約関数を設定できることです。専用の構文を学ぶ必要はありますが、SQLの挙動に近いものが多いので慣れやすいかと思います。

Developers.IOではその他の機能についても丁寧にご紹介していきたいとおもいますので、乞うご期待ください!