この記事は、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のFICやUNOを使い、閉域網を使用して安全に他システムや様々なクラウドと連携できます。
特徴としては以下になります。
開発時は
変換部品
をドラッグアンドドロップで繋げていき、実装していく流れで以下のようなものがあります。これらを使用してデータ連携できます。- データの結合する
ジョイナ
- データのグループ化、例えば売り上げの集計などを行う際に利用する
アグリゲータ
- データのフィルタリングを行う
フィルタ
- JSONファイルなど半構造化データを構造化形式に変換できる
構造パーサー
- データの結合する
ソース、ターゲットシステムへの接続は
コネクタ
を利用することでGUI上が可能。SAP、ERP、oracle、各種クラウドサービスなどの基本的なシステムや、REST、SOAP、ODataに対応しているシステムであれば接続可能となっております。
マッピングの流れ
こちらが今回実施するマッピングの流れとなります。
以下に添付している画像に記載の通りですが、FTPサーバーとセキュアエージェント上にある売り上げ一覧
と商品マスタ
を商品コードをキーに結合し、いくつかのデータ加工して最終的にあらかじめ用意しているOracleのテーブル上に格納するというマッピングとなります。
このマッピングでは、コネクタを使用して簡単にデータソース、ターゲットと接続可能
、繋げたシステムのデータ加工方法
、半構造データでもインテリジェント構造モデルを使用してデータ加工可能
といった点を知っていただければと思います。
今回、各種データをFTPサーバー、セキュアエージェントに置いていますが、これがSAPやERP上の場合も利用するコネクタが異なるだけでデータの加工における設定は基本的に同じなので、ぜひ見てみてください。また2022年10月24日現在、インフォマティカ社から1か月の無償トライアルも出されているのでお時間ある方は触ってみてください。
具体的な流れとしては以下になります。
- インテリジェント構造モデルを使ったJsonファイル(商品マスタ)のパターン抽出
- 今回使用する商品マスタのデータはJson形式のため読み込める形にします。
- コネクタの設定
- データソースとターゲットの設定をします。
- 「売り上げ一覧」と「商品マスタの結合」
- 売り上げ一覧には
product_code
、性別
、年齢
、ストアコード
などがあり、商品マスタにはproduct_code
、商品名
、食品名
、食品のカテゴリ
、値段
などがあります。ですのでproduct_code
をキーに商品マスタと売り上げ一覧のデータを結合します。
- 売り上げ一覧には
- 商品名変更
- 新しく
product_Name
というカラムを作り一部の商品名を“江戸前幕の内弁当”に変更します。
- 新しく
- 収益計算
- 新しく
Revenue
というカラムを作り、税込み価格と販売数のカラムから収益を計算してrevenueに格納します。
- 新しく
- オラクルへの格納
- 最後にあらかじめ用意していた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に接続して、ユーザー名とパスワードを入力してログインします。
データ統合
をクリック >新規
コンポーネント
>インテリジェント構造モデル
- 以下の項目を入力
- 名前:インテリジェント構造モデルの名前です。適当な名前を入力ください
プロジェクト
>参照
からこれから作成するモデルの保存場所を指定します- スキーマ/サンプルファイル:今回使用する商品マスタのデータをローカルフォルダから選択 *ここでいうローカルフォルダはセキュアエージェントではなく、このブラウザにアクセスしているローカルのPCになります。
構造の検出
をクリック後、保存
をクリックする
以上でモデルを作成できました。 同じ画面で検出したファイルの構造がツリー上で可視化されるようになります。
コネクタ設定
次にコネクタの設定をします。
IDMCではさまざまなコネクタを用意しておりまして、Salesforce、SAP、Oracle、Amazon S3など様々なサービスから指定のコネクタを使いデータを利用できます。
今回は、SA上とFTPサーバー上にあるデータを引っ張ってきて、oracleの既存のテーブルに格納しますので、FTPコネクタ
とセキュアエージェントにあるデータを利用できるフラットファイルコネクタ
とオラクルコネクタ
を利用します。
コネクタによって設定するプロパティは違いますが、以下ではOracleコネクタ設定時に入力が必須な項目について記載します。詳細はこちらをご覧ください。
管理者
>接続
>新しい接続
をクリック- タイプ:コネクタのタイプを選択します。今回は
Oracle
を選択 - ランタイム環境:このコネクタを使用する環境を選択します。
- ユーザー名:Oracleで設定しているユーザー名です。
- パスワード:Oracleで設定しているパスワードです。
- ホスト:OracleのIPアドレスです
- ポート:Oracleのポート番号です。基本的には1521番でよいかと思います。
- サービス名:Oraleのサービス名です
- コードページ:文字コードを選択します。
「売り上げ一覧」と「商品マスタ」の結合
コネクタの設定できましたら次はデータベースの設定です。 ここからの操作では変換部品を選択、繋げていき、プロパティで詳細設定するというのを繰り返していく形になります。
データ統合
>新規
>マッピング
>マッピング
>作成
でマッピングを作成- まずは売り上げデータの設定をします。
- 変換部品から
ソース
を選択 - プロパティで
ソース
>接続
からあらかじめ作成しておいたFTPコネクタを選択、オブジェクト
にて売り上げデータ(sales.csv)を選択 - 補足にはなりますが、プロパティの
ソース
>フィールド
では読み込んだファイルのカラム名が表示され、プロパティの横にあるプレビューではデータの中身を確認できます。
- 変換部品から
- 商品マスタの設定をします。こちらは、先ほど作成したインテリジェント構造モデルを利用して、半構造化データであるJsonファイルを読み取れる形で出力するために、
構造パーサー
という変換部品とJsonファイルへのパスが記載されたテキストファイル(JSON_File.txt)を使います。- 変換部品から
ソース
を選択して、プロパティでソース
>接続
からあらかじめ作成しておいたフラットファイルコネクタを選択。オブジェクト
にて商品マスタへのパスが記載されたファイル(JSON_File.txt)を選択。 - 変換部品から
構造パーサー
を選択。プロパティにて構造パーサー
>インテリジェント構造モデル
から先ほど作成したインテリジェント構造モデルを選択。 - ソースと構造パーサーを繋げて、
構造パーサー
のプロパティのフィールドマッピング
にてPATH(JSON_File.txtに記載されているJSONファイルのパス)をFilePath(product.jsonのカラム)にドラッグアンドドロップ。
- 変換部品から
これでデータの読み込みは完了です。次にこちらをジョイナー
というパーツを使って売り上げデータと商品マスタを結合します。
ジョイナー
という変換部品を選択- 売り上げデータと商品マスタを
ジョイナー
に繋げる。商品マスタをmasterに、売り上げデータをdetailに入れます。 ジョイナー
のプロパティにて設定をします- 受信フィールドにてそれぞれmasterとdetailに設定したファイルのどのカラムを抽出するかを設定します。今回は商品マスタのファイルからは
Product_Code
Product_Name
Price_TAX
を、売り上げデータに関してはAge
amaount
product_code
store_code
を持ってきます。 - 結合条件でそれぞれのファイルの
Product_Code
をキーに結合するように設定します。この際、結合タイプというのがあるのですがこれはmaster側のみ、もしくはdetailのみにあるprooduct_codeを含めるかどうかを設定します。今回ノーマルというものにしていてmaster側のみ、またはdetailのみにあるprooduct_codeは除外するという感じです
- 受信フィールドにてそれぞれmasterとdetailに設定したファイルのどのカラムを抽出するかを設定します。今回は商品マスタのファイルからは
商品名変更
この後はデータ加工部分になります。 1つ目で一部商品名を変更して新しく作成したProduct_Nameに格納、2つ目で価格と販売量から収益を計算します。
では、まず1つ目ですがこちらは式という変換部品を利用します。
式
という変換部品を選択する。ジョイナー
と式
を繋げる。- プロパティの受信フィールドにて利用するカラムを指定します。
フィールド選択条件
を名前付きフィールド
に変更、設定
にてage
amount
M_PRODUCT_NAME
M_UNI_PRICE_TAX
product_code
store_code
を選択する。 - プロパティの式にて以下の式を作成します。これは新しく
product_name
を作成して、そのカラムにproduct_code
がA00001
でstore _code
の先頭が19
のものに指定の名称を入れます。そして、それ以外のものは既存のカラムであるProduct_Name
を格納するというものです。- IIF(product_code='A00001' AND SUBSTR(store_code, 1, 2)='19', '江戸前幕の内弁当',M_PRODUCT_NAME )
収益計算
次に収益の計算をします。
アグリゲータ
という合計や平均などを行う際に利用する変換部品を使用します。こちらはグループごとの集計も可能なので今回は収益を計算してかつproduct_Nameとage、商品名と年齢が同じデータをグループ化してみます。
アグリゲータ
という変換部品を選択- プロパティの受信フィールドにて
フィールド選択条件
を名前付きフィールド
に変更、設定
にてage
、amount
、M_UNI_PRICE_TAX
、product_Name
を選択 - プロパティの集計にて
+ボタン
選択して新しいフィールドにて,以下のように設定してOK
をクリック- フィールドマップ:出力フィールド
- 名前:Revenue(適当な名前を入れてください。)
- タイプ:decimal
- 精度:10
- スケール:0
- 作成したRevenueのフィールドにて、「式」の
設定
をクリックして以下の記載後、「検証」ボタンで式が有効か確認。こちらは商品の税込み価格と売り上げ数から1つの商品の売上合計金額を算出する式になります。- SUM(To_Decimal(M_UNI_PRICE_TAX) * To_Decimal(amount) )
product_Name
とage
が同じレコードをグループ化します。プロパティグループ化
の「+」を選択、フィールド名
から以下の2つをそれぞれ選択- Product_Name
- age
Oracleへの格納
ここまでがデータ加工の部分で最後にこれらをあらかじめ作成しておいたオラクルのテーブルに格納していきます。
ソース
を選択- プロパティの
受信フィールド
にてどのカラムを使うかを設定 - プロパティの
ターゲット
>接続
からあらかじめ作成しておいたoracleコネクタを選択。オブジェクト
>選択
にてあらかじめOracle側で作成しておいたテーブル名を選択 フィールドマッピング
にてどのカラムに今回作成したカラムを格納するかを設定。Oracleのテーブル側に今回作成したカラム(Product_Name
、AGE
、REVENUE
)と同じ名称のカラムを作成しているので 同じ名称ごとに対応付けします。
以上でマッピングは完了です。以下がマッピングの完成形となります。
では、最後に実行してみましょう。画面右上の保存
と実行
をクリックすると今回作成したマッピングが実行されます。
どうでしたか?問題なく動きましたでしょうか?エラーが出た場合はエラーログも見られるので確認してみてください!
最後に
今回はインフォマティカの簡単なマッピングを作成しました。ご紹介したのはあくまで一例で、Cloud Integration Hub
というハブの機能やCloud Application Integration
というAPI開発の機能などIDMCにはいくつもの機能があります。
今後、DXやデータ活用が進む中そのためにデータ統合は必須の機能になっていくかと思いますので、この記事が参考になっていれば幸いです。
ご覧いただきありがとうございました! それでは、明日の記事もお楽しみに!