IICS CDI Mapping Designer入門 〜Hierarchy Parser(階層パーサー)編〜
どうも!DA部の春田です。
Informatica Cloud Data Integrationでデータ変換処理を構築するためのインターフェイス"Mapping"には、データの変換処理を簡単に実装するための様々なパーツが用意されています。今回は非構造化データを扱う際に便利なパーツ、Hierarchy Parserについてご紹介していきます!
Hierarchy Parserでは何ができるのか?
Hierarchy Parserでは、JSONやXMLといった階層型の非構造化データをリレーショナル型に変換して出力することができます。非構造化データのパースには、階層スキーマ(Hierarchical schema)と呼ばれるサンプルのレコードのような物が必要ですが、その分深めにネストされたJSONもしっかりパースすることが可能です。
事前準備
IICSおよび、Secure Agentの環境は構築できているとします。初めての方は、以下のエントリをご参照ください。
今回はJSONのサンプルデータをJSON Generatorというサービスを使って作成します。デフォルトの以下のフォーマットのままJSONデータを作成し、sample.json
として保存します。
[ '{{repeat(5, 7)}}', { _id: '{{objectId()}}', index: '{{index()}}', guid: '{{guid()}}', isActive: '{{bool()}}', balance: '{{floating(1000, 4000, 2, "$0,0.00")}}', picture: 'http://placehold.it/32x32', age: '{{integer(20, 40)}}', eyeColor: '{{random("blue", "brown", "green")}}', name: '{{firstName()}} {{surname()}}', gender: '{{gender()}}', company: '{{company().toUpperCase()}}', email: '{{email()}}', phone: '+1 {{phone()}}', address: '{{integer(100, 999)}} {{street()}}, {{city()}}, {{state()}}, {{integer(100, 10000)}}', about: '{{lorem(1, "paragraphs")}}', registered: '{{date(new Date(2014, 0, 1), new Date(), "YYYY-MM-ddThh:mm:ss Z")}}', latitude: '{{floating(-90.000001, 90)}}', longitude: '{{floating(-180.000001, 180)}}', tags: [ '{{repeat(7)}}', '{{lorem(1, "words")}}' ], friends: [ '{{repeat(3)}}', { id: '{{index()}}', name: '{{firstName()}} {{surname()}}' } ], greeting: function (tags) { return 'Hello, ' + this.name + '! You have ' + tags.integer(1, 10) + ' unread messages.'; }, favoriteFruit: function (tags) { var fruits = ['apple', 'banana', 'strawberry']; return fruits[tags.integer(0, fruits.length - 1)]; } } ]
合わせて階層スキーマも作成しておきます。作成したデータの型的なものを判別させられればいいので、以下のようなJSONも合わせて作成します。今回はデモなので、文字列や数値の長さは適当で構いません。以下の場合、文字列は長さ225、数値は小数なしの15桁で定義されます。実運用の際には、文字数・桁数や少数点などをきっちり合わせた上で階層スキーマを作成しましょう。sample_schema.json
というファイル名で保存します。
[{ "_id": "X", "index": 9, "guid": "X", "isActive": "X", "balance": "X", "picture": "X", "age": 9, "eyeColor": "X", "name": "X", "gender": "X", "company": "X", "email": "X", "phone": "X", "address": "X", "about": "X", "latitude": 9, "longitude": 9, "tags": [ "X" ], "friends": [ { "id": 9, "name": "X" } ], "greeting": "X", "favoriteFruit": "X" }]
最後にもう一つ、JSONデータのパスを記載したテキストファイルを作成します。デザイナー上のSourceから直接JSONを読み込んでも、上手くスキーマ情報が反映されないためですね。このような場合は、ファイルのパスだけ指定した以下のようなファイルを作成しておきます。ファイル名はJSON_File.txt
としておいてください。
PATH /home/infa/cm_haruta/sample.json
これで、sample.json
sample_schema.json
JSON_File.txt
という3つのファイルが用意できたかと思います。このうちsample.json
とJSON_File.txt
は、Secure Agentのディレクトリ配下に配置しておいてください。
IICSから、sample.json
とJSON_File.txt
をFlat Fileとして読み取るためのコネクションを作成します。データを配置したディレクトリに対して、コネクションを作成してください。
これで事前準備はOKです。
実際に使ってみた!
まずは左メニューバーの「New」をクリックして、Mappingを新規作成します。
Mappingデザイナーの画面が表示されたら、Sourceの設定を行います。Object
にJSON_FILE.txt
を選択してください。
もちろん、このままだとSourceのFields
には大した情報が含まれていません。PATH
というカラムにJSONデータへのパスが1行だけ入っている状態です。
次に、デザイナー上でHierarchy Parserをパレットからドラッグ&ドロップしてきます。
Hierarchy Parserのタブの数は全部で7つ、General
Incoming Fields
Input Settings
Input Field Selection
Field Mapping
Output Fields
Advanced
と、他のパーツに比べたらかなり多いですね…!ただ、今回使うのはInput Settings
Input Field Selection
Field Mapping
の3つのみです。
まずはInput Settings
のタブをクリックし、スキーマの設定を行います。Input Type
のBuffer
は、Input自体にデータが含まれている場合に選択します。今回のInputにはファイルパス情報しか含まれていないため、File
を選択してHierarchy Parserの中でファイルを開くようにしておきます。Schema
には、新しくHierarchical Schemaというコンポーネントを作成します。New
をクリックしてください。
Hierarchical Schemaの編集画面が出るので、Schema/Sample File
に先ほど用意したsample_schema.json
を指定します。
念のためValidate
をクリックして中身に問題がないかチェックしておきましょう。OK
をクリックします。
作成したHierarchical Schemaを保存したら、Mappingの画面に戻ります。Schema
のSelect
をクリックし、作成したHierarchical Schema1
を選択します。
スキーマの設定はこれで完了です。続いて、Input Field Selection
をクリックしてください。There are no incoming fields.
という表記の通りInputが設定されていない場合は、デザイナー上でSource
からHierarchy Parser
へ矢印をドラッグして引っ張っておきましょう。
Incoming FieldsのField Nameに追加されたPATH
というカラムを、Hierarchical Schema Input FieldsのInput
というカラムへドラッグ&ドロップし、マッピングを行います。
その後、Field Mapping
のタブをクリックすると、以下のような階層構造の情報が表示されるはずです。(何も表示されない場合は、一旦Mappingを保存して開き直してみてください。)
Element Nameの最上位にあるrootArray
左のプルダウンをクリックし、Map all descendants
をクリックすると、右側のRelational Fieldsにカラム情報が自動で挿入されます。
今回のJSONの構造上、データはroot
、tags_Group
、friends
の3つに分かれます。配列データがあった場合に自動でGroup化されるようですね。
出力されるデータのスキーマ情報は、Output Fields
タブからまとめて変更することができます。今回は何もいじりません。
最後に、Previewで出力データを確認してみましょう。Previewの前に、Mappingの構造上、Hierarchy ParserからTargetへの接続が必要です。デザイナー上で矢印を引っ張ると、どのグループをTargetに流すか選択するポップアップが表示されます。無難にroot
を選択しておきましょう。Targetを複数用意すれば、他のGroupのデータも並行して出力可能です。
良い感じに変換できてます!
最後に
JSONを構造化データに変換したい需要はかなり高めだと思います。何かAPIを叩いたレスポンスを処理したい場合は、階層パーサーが使えると覚えておいてください!
Developers.IOではその他の機能についても丁寧にご紹介していきたいとおもいますので、乞うご期待ください!