IICS CDI Mapping Designer入門 〜Hierarchy Builder(階層ビルダ)編〜

Informatica Cloud Data IntegraionのMappingで使用できるパーツ「Hierarchy Builder」についてご紹介します。

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

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

Informatica Cloud Data Integration(以下、IICS)でデータ変換処理を構築するためのインターフェイス"Mapping"には、データの変換処理を簡単に実装するための様々なパーツが用意されています。今回は非構造化データを扱う際に便利なパーツ、Hierarchy Builderについてご紹介していきます!

Hierarchy Builderでは何ができるのか?

Hierarchy Builderは、リレーショナルデータをJSONやXMLといった非構造化データに変換するためのパーツです。先日ご紹介したHierarchy Parserの逆ですね。Hierarchy Parserと同様、変換のためにHierarchy Schema(階層スキーマ)というデータ情報を定義しておく必要があります。

デザイナーの特徴的に、複数のSourceをInputに流してまとめてガッチャンコできる点が良い点ですね。

事前準備

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

今回も、Redshiftのサンプルデータを拝借します。tickitdb.zipをダウンロードし、解凍したデータをSecure Agent内に配置してください。

クリックでtickitdb.zipをダウンロード

IICSからFlat Fileとして読み取るコネクションを作成します。

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

実際に使ってみた!

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

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

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

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

Hierarchy Builderのタブは複数ありますが、主に使用するのはOutput SettingsField Mappingの2つです。まずOutput SettingsでHierarchy Schemaの新規作成を行います。

設定画面が開いたら、Hierarchy Schemaの元となるサンプルデータをアップします。今回は以下のようなJSONデータを用意しました。

[{
    "salesid": 9,
    "listid": 9,
    "userid": {
        "sellerid": 9,
        "buyerid": 9
    },
    "eventid": 9,
    "dateid": 9,
    "qtysold": 9,
    "pricepaid": 9,
    "commission": 9,
    "saletime": "X"
}]

Validateをクリックして問題なければ、保存してMappingの画面に戻ります。

作成したHierarchy Schemaを、Selectから選択します。

Hierarchy Schemaが更新されるとデザイナー上で矢印がリセットされてしまうので、再度SourceからHierarchy Builderへ引っ張りましょう。

続いて、Field Mappingタブをクリックします。ここでInputにきているテーブル情報と、先ほど指定したHierarchy Schemaに基づくJSONの構造が表示されます。紐づけたいカラム同士をドラッグ&ドロップでセッティングしていきます。

このような感じでマッピングできたら、出力データを確認してみます。Hierarchy BuilderはPreviewが使えないため、今回は実際にSecure Agentのローカルディレクトリへ出力してみます。まずはデザイナー上でHierarchy BuilderからTargetへ矢印を引っ張ってきてください。

デザイナー上でTargetをクリックし、出力の設定を行います。Targetのタブから使用するコネクションを選択した後、Selectで出力先を指定します。

今回は新規にファイルを作成するため、Create New at Runtimeを選択し、Static File Nameにoutput.jsonと入力します。

Formatting Optionsは以下のように設定しておきます。2020年12月現在はJSONの出力形式の記載がありませんが、出力は可能です。

また、今回はヘッダは不要ですので、AdvancedでHeader OptionsをNo Headerとしてください。

Targetの設定が完了したら、Mapping全体をSaveし、Runから実行してみましょう。

ジョブが開始されるとこのようなアラートが表示されるので、クリックして成否を確認します。

ジョブの方は成功したみたいです。

肝心の出力データは、以下のような形式でした。外枠の[]がついてしまっており、手元で検証してみた限りでは純粋なJSONLとはならないみたいですね。その点だけ、他のクライアントから読み込む際は注意が必要です。

[{"salesid":1,"listid":1,"userid":{"sellerid":36861,"buyerid":21191},"eventid":7872,"dateid":1875,"qtysold":4,"pricepaid":728,"commission":109.2,"saletime":"2008-02-18T02:36:48.000000000"}]
[{"salesid":2,"listid":4,"userid":{"sellerid":8117,"buyerid":11498},"eventid":4337,"dateid":1983,"qtysold":2,"pricepaid":76,"commission":11.4,"saletime":"2008-06-06T05:00:16.000000000"}]
[{"salesid":3,"listid":5,"userid":{"sellerid":1616,"buyerid":17433},"eventid":8647,"dateid":1983,"qtysold":2,"pricepaid":350,"commission":52.5,"saletime":"2008-06-06T08:26:17.000000000"}]
[{"salesid":4,"listid":5,"userid":{"sellerid":1616,"buyerid":19715},"eventid":8647,"dateid":1986,"qtysold":1,"pricepaid":175,"commission":26.25,"saletime":"2008-06-09T08:38:52.000000000"}]

最後に

パパッとテーブルをJSONレコードに変換するにはちょうど良いパーツだな、という手応えでした。

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