データマネジメント基盤「インフォマティカ」を触ってみた!

この記事は、NTT Communications Advent Calendar 2022 12日目の記事です。

はじめに

はじめまして、クラウド&ネットワークサービス部でデータマネジメントに関するサービス企画・販売企画を担当している古志将樹です。

今回はNTT Comで提供しているデータマネジメント基盤である「インフォマティカソリューション」について簡単に触ってみたので、その操作方法などを紹介したいと思います。

データ活用が必要とされる背景、課題

インフォマティカソリューションの紹介をする前に、データ利活用を進めるにあたってよくぶつかる壁を説明します。 近年、DX/データ分析の動きが盛り上がっていますが、そのために使用するデータは1つに集まっていることはまれで、クラウド、オンプレなど各所に散在してることがよくあります。そのため、以下のような課題をDX/データ分析を実施する前に解決する必要があります。

  • アプリケーション変革期においてデータ移行・連携・同期コストが増大すること
  • 散在するデータ資産の品質・信頼性・安全性の担保ができないこと
  • 業務・顧客サービス・デジタル戦略へのデータ資産活用が困難であること

これらを解決するのが今回ご紹介するデータマネジメント基盤であるインフォマティカソリューションになります。
NTT Comではこちらのサービスをお客様のDXを推進するプラットフォームであるSmart Data Platform(SDPF)上でご提供しております。

マッピングチュートリアル

では、ここからはインフォマティカソリューションの1つのデータ統合の機能であるIntelligent Data Management Cloud(IDMC)について、簡単なチュートリアルをやってみたいと思います。

Intelligent Data Management Cloud(IDMC)について

こちらは、データ流通の基本となる部分になります。AシステムからBシステムにデータを連携するといった機能を持っており、オンプレ、クラウドの各所に点在しているシステムのデータを統合する時に必須となります。
主にポッドセキュアエージェントというシステムの2つから構成されており、コントローラーであるポッドは、データ処理に関わる命令をセキュアエージェントに送りセキュアエージェントでデータ処理を行っています。 そのため、実データはセキュアエージェントに送られるわけですが、お客様によっては、インターネット上に実データを通したくないといったご要望をお持ちのこともあります。その場合においては、こちらNTT ComのFICUNOを使い、閉域網を使用して安全に他システムや様々なクラウドと連携できます。

特徴としては以下になります。

  • 開発時は 変換部品をドラッグアンドドロップで繋げていき、実装していく流れで以下のようなものがあります。これらを使用してデータ連携できます。

    • データの結合するジョイナ
    • データのグループ化、例えば売り上げの集計などを行う際に利用するアグリゲータ
    • データのフィルタリングを行うフィルタ
    • JSONファイルなど半構造化データを構造化形式に変換できる構造パーサー
  • ソース、ターゲットシステムへの接続はコネクタを利用することでGUI上が可能。SAP、ERP、oracle、各種クラウドサービスなどの基本的なシステムや、REST、SOAP、ODataに対応しているシステムであれば接続可能となっております。

マッピングの流れ

こちらが今回実施するマッピングの流れとなります。 以下に添付している画像に記載の通りですが、FTPサーバーとセキュアエージェント上にある売り上げ一覧商品マスタを商品コードをキーに結合し、いくつかのデータ加工して最終的にあらかじめ用意しているOracleのテーブル上に格納するというマッピングとなります。
このマッピングでは、コネクタを使用して簡単にデータソース、ターゲットと接続可能繋げたシステムのデータ加工方法半構造データでもインテリジェント構造モデルを使用してデータ加工可能といった点を知っていただければと思います。 今回、各種データをFTPサーバー、セキュアエージェントに置いていますが、これがSAPやERP上の場合も利用するコネクタが異なるだけでデータの加工における設定は基本的に同じなので、ぜひ見てみてください。また2022年10月24日現在、インフォマティカ社から1か月の無償トライアルも出されているのでお時間ある方は触ってみてください。

具体的な流れとしては以下になります。

  1. インテリジェント構造モデルを使ったJsonファイル(商品マスタ)のパターン抽出
    • 今回使用する商品マスタのデータはJson形式のため読み込める形にします。
  2. コネクタの設定
    • データソースとターゲットの設定をします。
  3. 「売り上げ一覧」と「商品マスタの結合」
    • 売り上げ一覧にはproduct_code性別年齢ストアコードなどがあり、商品マスタにはproduct_code商品名食品名食品のカテゴリ値段などがあります。ですのでproduct_codeをキーに商品マスタと売り上げ一覧のデータを結合します。
  4. 商品名変更
    • 新しくproduct_Nameというカラムを作り一部の商品名を“江戸前幕の内弁当”に変更します。
  5. 収益計算
    • 新しくRevenueというカラムを作り、税込み価格と販売数のカラムから収益を計算してrevenueに格納します。
  6. オラクルへの格納
    • 最後にあらかじめ用意していたOracleのテーブルに作成したデータを格納します。

以下は今回使用するデータになります。

sales.csv:売り上げデータです。

store_code  sales_date  sales_time  product_code    amount  payment_code    gender  age
0   2006/7/18   0:00:02 A00001  1   1   M   20
27001   2006/7/19   0:00:05 A00002  2   1   F   30
27002   2006/7/20   0:00:08 A00003  1   1   F   20
27003   2006/7/21   0:00:11 A00004  1   2   F   50
27004   2006/7/22   0:00:14 A00005  1   3   M   60
27005   2006/7/23   0:00:17 A00006  3   4   F   20
27006   2006/7/24   0:00:20 A00007  1   1   M   20
27007   2006/7/25   0:00:23 A00008  1   2   M   30
19001   2006/7/26   0:00:26 A00009  2   1   M   20
19002   2006/7/27   0:00:29 A00010  5   1   F   60
19003   2006/7/28   0:00:32 A00011  3   2   F   20
19004   2006/7/29   0:00:35 A00012  1   1   F   20
19005   2006/7/30   0:00:38 A00013  1   1   M   40
19006   2006/7/31   0:00:41 A00014  4   3   F   20
19007   2006/8/1    0:00:44 A00015  1   1   M   20
0   2006/8/2    0:00:47 A00016  1   1   M   30
27001   2006/8/3    0:00:50 A00017  2   5   M   30
27002   2006/8/4    0:00:53 A00018  1   1   F   20
27003   2006/8/5    0:00:56 A00019  1   1   F   20
27004   2006/8/6    0:00:59 A00020  2   1   F   60
27005   2006/8/7    0:01:02 A00021  1   1   M   20
27006   2006/8/8    0:01:05 B00001  1   2   F   30
27007   2006/8/9    0:01:08 B00002  1   3   M   20
19001   2006/8/10   0:01:11 B00003  3   4   M   50
19002   2006/8/11   0:01:14 B00004  1   1   M   60
19003   2006/8/12   0:01:17 B00005  1   2   F   20
19004   2006/8/13   0:01:20 B00006  2   1   F   20
19005   2006/8/14   0:01:23 B00007  5   1   F   30
19006   2006/8/15   0:01:26 C00001  3   2   M   20

product.json:商品マスタデータ(一部)です。

[
    {
        "M_PRODUCT_CODE": "A00001",
        "M_PRODUCT_NAME": "幕の内弁当",
        "M_PRODUCT_CATEGORY": "お弁当",
        "M_COST": "382",
        "M_UNIT_PRICE": "550",
        "M_UNI_PRICE_TAX": "578"
    },
    {
        "M_PRODUCT_CODE": "A00002",
        "M_PRODUCT_NAME": "天丼",
        "M_PRODUCT_CATEGORY": "お弁当",
        "M_COST": "411",
        "M_UNIT_PRICE": "500",
        "M_UNI_PRICE_TAX": "525"
    },
    {
        "M_PRODUCT_CODE": "A00003",
        "M_PRODUCT_NAME": "カツ丼",
        "M_PRODUCT_CATEGORY": "お弁当",
        "M_COST": "365",
        "M_UNIT_PRICE": "500",
        "M_UNI_PRICE_TAX": "525"
    }

JSON_File.txt:product.jsonファイルのパスを記載したファイル、インテリジェント構造モデルによるproduct.jsonファイルの読み取りに使用します。

PATH
/home/infa/product.json

インテリジェント構造モデルによるJsonファイル(商品マスタ)のパターン抽出

今回使用する商品マスタのデータはJson形式のためデータ加工する前にパターン抽出して構造化します。インテリジェント構造モデルについての詳細はこちらをご覧ください。

では、まず適当なブラウザからInformatica Cloudに接続して、ユーザー名とパスワードを入力してログインします。

  1. データ統合をクリック > 新規
  2. コンポーネント > インテリジェント構造モデル
  3. 以下の項目を入力
    • 名前:インテリジェント構造モデルの名前です。適当な名前を入力ください
    • プロジェクト > 参照からこれから作成するモデルの保存場所を指定します
    • スキーマ/サンプルファイル:今回使用する商品マスタのデータをローカルフォルダから選択 *ここでいうローカルフォルダはセキュアエージェントではなく、このブラウザにアクセスしているローカルのPCになります。
    • 構造の検出をクリック後、保存 をクリックする

以上でモデルを作成できました。 同じ画面で検出したファイルの構造がツリー上で可視化されるようになります。

コネクタ設定

次にコネクタの設定をします。 IDMCではさまざまなコネクタを用意しておりまして、Salesforce、SAP、Oracle、Amazon S3など様々なサービスから指定のコネクタを使いデータを利用できます。 今回は、SA上とFTPサーバー上にあるデータを引っ張ってきて、oracleの既存のテーブルに格納しますので、FTPコネクタとセキュアエージェントにあるデータを利用できるフラットファイルコネクタオラクルコネクタを利用します。 コネクタによって設定するプロパティは違いますが、以下ではOracleコネクタ設定時に入力が必須な項目について記載します。詳細はこちらをご覧ください。

  1. 管理者 > 接続 > 新しい接続をクリック
  2. タイプ:コネクタのタイプを選択します。今回はOracleを選択
  3. ランタイム環境:このコネクタを使用する環境を選択します。
  4. ユーザー名:Oracleで設定しているユーザー名です。
  5. パスワード:Oracleで設定しているパスワードです。
  6. ホスト:OracleのIPアドレスです
  7. ポート:Oracleのポート番号です。基本的には1521番でよいかと思います。
  8. サービス名:Oraleのサービス名です
  9. コードページ:文字コードを選択します。

「売り上げ一覧」と「商品マスタ」の結合

コネクタの設定できましたら次はデータベースの設定です。 ここからの操作では変換部品を選択、繋げていき、プロパティで詳細設定するというのを繰り返していく形になります。

  1. データ統合 > 新規 > マッピング > マッピング > 作成でマッピングを作成
  2. まずは売り上げデータの設定をします。
    • 変換部品からソースを選択
    • プロパティでソース > 接続からあらかじめ作成しておいたFTPコネクタを選択、オブジェクトにて売り上げデータ(sales.csv)を選択
    • 補足にはなりますが、プロパティのソース > フィールドでは読み込んだファイルのカラム名が表示され、プロパティの横にあるプレビューではデータの中身を確認できます。

  1. 商品マスタの設定をします。こちらは、先ほど作成したインテリジェント構造モデルを利用して、半構造化データであるJsonファイルを読み取れる形で出力するために、構造パーサーという変換部品とJsonファイルへのパスが記載されたテキストファイル(JSON_File.txt)を使います。
    • 変換部品からソースを選択して、プロパティでソース > 接続からあらかじめ作成しておいたフラットファイルコネクタを選択。オブジェクトにて商品マスタへのパスが記載されたファイル(JSON_File.txt)を選択。
    • 変換部品から構造パーサーを選択。プロパティにて構造パーサー > インテリジェント構造モデル から先ほど作成したインテリジェント構造モデルを選択。
    • ソースと構造パーサーを繋げて、構造パーサー のプロパティのフィールドマッピング にてPATH(JSON_File.txtに記載されているJSONファイルのパス)をFilePath(product.jsonのカラム)にドラッグアンドドロップ。

これでデータの読み込みは完了です。次にこちらをジョイナーというパーツを使って売り上げデータと商品マスタを結合します。

  1. ジョイナーという変換部品を選択
  2. 売り上げデータと商品マスタをジョイナーに繋げる。商品マスタをmasterに、売り上げデータをdetailに入れます。
  3. ジョイナーのプロパティにて設定をします
    • 受信フィールドにてそれぞれmasterとdetailに設定したファイルのどのカラムを抽出するかを設定します。今回は商品マスタのファイルからはProduct_Code Product_Name Price_TAXを、売り上げデータに関してはAge amaount product_code store_codeを持ってきます。
    • 結合条件でそれぞれのファイルのProduct_Codeをキーに結合するように設定します。この際、結合タイプというのがあるのですがこれはmaster側のみ、もしくはdetailのみにあるprooduct_codeを含めるかどうかを設定します。今回ノーマルというものにしていてmaster側のみ、またはdetailのみにあるprooduct_codeは除外するという感じです

商品名変更

この後はデータ加工部分になります。 1つ目で一部商品名を変更して新しく作成したProduct_Nameに格納、2つ目で価格と販売量から収益を計算します。

では、まず1つ目ですがこちらは式という変換部品を利用します。

  1. という変換部品を選択する。
  2. ジョイナーを繋げる。
  3. プロパティの受信フィールドにて利用するカラムを指定します。フィールド選択条件名前付きフィールドに変更、設定にてage amount M_PRODUCT_NAME M_UNI_PRICE_TAX product_code store_codeを選択する。
  4. プロパティの式にて以下の式を作成します。これは新しくproduct_nameを作成して、そのカラムにproduct_codeA00001store _codeの先頭が19のものに指定の名称を入れます。そして、それ以外のものは既存のカラムであるProduct_Nameを格納するというものです。
    • IIF(product_code='A00001' AND SUBSTR(store_code, 1, 2)='19', '江戸前幕の内弁当',M_PRODUCT_NAME )

収益計算

次に収益の計算をします。 アグリゲータという合計や平均などを行う際に利用する変換部品を使用します。こちらはグループごとの集計も可能なので今回は収益を計算してかつproduct_Nameとage、商品名と年齢が同じデータをグループ化してみます。

  1. アグリゲータという変換部品を選択
  2. プロパティの受信フィールドにてフィールド選択条件名前付きフィールドに変更、設定にてageamountM_UNI_PRICE_TAXproduct_Nameを選択
  3. プロパティの集計にて+ボタン選択して新しいフィールドにて,以下のように設定してOKをクリック
    • フィールドマップ:出力フィールド
    • 名前:Revenue(適当な名前を入れてください。)
    • タイプ:decimal
    • 精度:10
    • スケール:0
  4. 作成したRevenueのフィールドにて、「式」の設定をクリックして以下の記載後、「検証」ボタンで式が有効か確認。こちらは商品の税込み価格と売り上げ数から1つの商品の売上合計金額を算出する式になります。
    • SUM(To_Decimal(M_UNI_PRICE_TAX) * To_Decimal(amount) )
  5. product_Nameageが同じレコードをグループ化します。プロパティグループ化の「+」を選択、フィールド名から以下の2つをそれぞれ選択
    • Product_Name
    • age

Oracleへの格納

ここまでがデータ加工の部分で最後にこれらをあらかじめ作成しておいたオラクルのテーブルに格納していきます。

  1. ソースを選択
  2. プロパティの受信フィールドにてどのカラムを使うかを設定
  3. プロパティのターゲット > 接続からあらかじめ作成しておいたoracleコネクタを選択。オブジェクト > 選択にてあらかじめOracle側で作成しておいたテーブル名を選択
  4. フィールドマッピングにてどのカラムに今回作成したカラムを格納するかを設定。Oracleのテーブル側に今回作成したカラム(Product_NameAGEREVENUE)と同じ名称のカラムを作成しているので 同じ名称ごとに対応付けします。

以上でマッピングは完了です。以下がマッピングの完成形となります。
では、最後に実行してみましょう。画面右上の保存実行をクリックすると今回作成したマッピングが実行されます。 どうでしたか?問題なく動きましたでしょうか?エラーが出た場合はエラーログも見られるので確認してみてください!

最後に

今回はインフォマティカの簡単なマッピングを作成しました。ご紹介したのはあくまで一例で、Cloud Integration Hubというハブの機能やCloud Application IntegrationというAPI開発の機能などIDMCにはいくつもの機能があります。 今後、DXやデータ活用が進む中そのためにデータ統合は必須の機能になっていくかと思いますので、この記事が参考になっていれば幸いです。

ご覧いただきありがとうございました! それでは、明日の記事もお楽しみに!

参考リンク

Smart Data Platform(SDPF)とは

NTT Com Knowledge Center(データ統合インフォマティカ ソリューション)

インフォマティカ 1か月の無償トライアル

© NTT Communications Corporation All Rights Reserved.