<前編>」を実施されている方は、本チュートリアルを進める前に下記を実行して再度データの取り込みをお願いいたします。前回のサンプルデータに一部問題があったため修正しております。QuickStartメニューのDashboardをクリックし、Databasesの横のドクロマークをクリック。ingestステップを再度実行する前回の記事に続き、本記事でもMarkLogicデータハブフレームワークを利用してどのようにしてデータ統合を素早く柔軟性を持って実施するかをご紹介します。データハブフレームワークの利用方法については必要に応じて下記ドキュメントもご参照ください。(日本語版のドキュメントは5.0のものになります)日本語版:https://docs.marklogic.com/datahub/5.0-jp/英語版:https://docs.marklogic.com/datahub/前回の記事までで、異なる2つのデータソースからの顧客情報をAs-Isで取り込むことが出来たと思います。今回の記事では、取り込んだデータをエンティティ(実際のビジネスで利用するデータモデル)にハーモナイズする方法と、同一顧客を特定するマスタリングについて説明をしていきます。エンティティの作成まずはじめに、アウトプットの形式(ビジネス・エンティティ)を定義します。今回のビジネス課題としては、下記がありました。・顧客情報を取得する際に2つのシステムを検索しなければならない・顧客情報のフォーマットが異なるため、同一条件でのデータ検索が難しい(例:項目名が違う、データの書式(電話番号や日付など)が違うなど)・検索して出てきた顧客が同一人物かどうかを手作業で判断しなければいけないそのため、今回は顧客が同一人物かどうかを判断できることを目的にエンティティを検討します。今回は下記の項目から構成されるエンティティを定義しました。それではこのエンティティをDHF上で実装していきます。ENTITY”をクリックします。エンティティの作成画面が出ますので、下記の通り入力し”SAVE”をクリックします。すると、MarkLogicのインデックスを更新するか聞かれますので、”Yes”をクリックします。以上でCustomerエンティティが作成されました。次はAs-Isで取り込んだCustomer1とCustomer2のデータをこのエンティティにマッピングしていきます。QuickStartメニューから”Flow”を選択し、先程作成したCustomer1フローを選択します。Stepの作成画面では下記の通り情報を入力し、”SAVE”をクリックします。新しく作成されたMappingCustomer1をクリックすると、下記のような画面が表示されます。ここで、取り込んだデータとエンティティのマッピングを定義していきます。その際、標準で用意されている関数を利用してデータの変換を行うことが可能です。(”f(x)”アイコンをクリックすることで、利用可能な関数の一覧を見ることが出来ますし、こちらのドキュメントにも記載があります。標準で用意されている関数以外にも、自分でカスタム関数を定義することも可能です。今回のチュートリアルでは下記2つのカスタム関数を作成します。scrupt(.xqy)などで定義されます。ディレクトリに格納されている必要があります。今回は下記のようなsjsファイルを作成します。次にこのsjsファイルをデプロイします。(Windowsの場合はbat)※もし下記のようなエラーが出る場合、プロジェクトディレクトリ直下のgradle.propertiesの16-18行目に記載されているmlUsername/mlPasswordに適切な値をセットしてください。以上でカスタム関数を利用できるようになりましたので、早速マッピングを行っていきます。下記のとおりに設定を行います。Testボタンを押して、結果が想定どおりであることを確認します。MappingCustomer1だけにチェックを入れ、”RUN”をクリックします。13.ステップの実行が終わったら、結果を確認します。Data”をクリックします。“Collection:MappingCustomer1”に絞ります。適当なドキュメントをクリックして詳細を確認します。すると下記のようなドキュメントが表示されると思います。As-Isのデータからエンティティが生成されていることが確認できます。同様にして、Customer2もマッピングを行います。先程と同様に、QuickStartメニューの”Flows”をクリックし、Customer2フローを選択します。STEP”をクリックし、下記の通り設定を行い”SAVE”をクリックします。マッピング表を下記のとおりに定義します。MappingCustomer2だけ選択し、”RUN”をクリックします。マッピングの結果を確認します。Customer2も正しくマッピングされており、Customerコレクションが20件に増えていることが確認できます。以上で、異なる2つのデータを一つの共通のエンティティにマッピング出来ました。実際のアプリケーションで使うにはこれだけでは不十分です。前提にあったとおり、現状では検索して出てきた顧客が同一人物かどうかを手作業で判断しなければいけないという課題がありました。これを解決するために、Masteringの機能を利用して、同一人物かどうかの判定を自動的に行うようにします。QuickStartメニューの”Flows”をクリックします。FLOW”をクリックし、下記の通り設定を行ったら”CREATE”をクリックします。作成したMasteringフローをクリックします。STEPをクリックし、下記の通り設定を行い”SAVE”をクリックします。Stepが作成されます。Stepは「Matching」と「Merging」という2つの要素から構成されます。Matchingは各ドキュメントを比較する際の条件を定義しており、Mergingは一致したドキュメントをどのようにマージするかを定義しています。詳細についてはこちらのドキュメントを参照してください。Matchingから設定を行います。Optionsを設定します。ここでは、エンティティがマッチしているかどうかを判断する条件を設定します。各設定の内容はざっくり下記のとおりとなります。Optionsを下記の通り設定します。Thresholdsを設定します。Optionsを適用した結果のスコアがいくつ以上だとどのようなアクションを行うか、といった設定をします。今回はしきい値とアクションを下記の通りとします。自動的にマージスコアが100以上(一項目だけ異なっている):ユーザに通知を行う下記の通り設定を行います。Notify25.次にMergingの設定を行います。Actionの動作を設定します。詳細についてはこちらのドキュメントを参照してください。各項目をマージする際の方法を指定します。Strategyで定義されている方法でマージされます。Optionは特に設定しません。Strategiesでは、マージ方法を定義します。Optionで呼び出されて利用されます。Strategyのみを定義します。Collectionsでは、各アクションが実行されたドキュメントに付与されるコレクションを定義できます。今回はデフォルトのままにします。以上でマスタリングの設定は完了です。RUNをクリックして実際に実行してみます。Data”をクリックします。データベースをFINALにセットすると、Customer1のデータ10件に対して、マスタリングを実行し、そのうち1件がマージされ、1件が通知がされていることがわかります。Collectionからsm-Customer-mergedをクリックして絞り込み、該当のドキュメントをクリックします。全ての項目が完全一致していた佐藤美咲さんが自動的にマージされています。Strategyで設定した通り、異なる値を持っていたIDは2つの値を維持しています。実際の運用では、エンドユーザーが必要に応じて適切なデータを選択することが可能になります。次に通知されたドキュメントを見てみます。Data”をクリックし、データベースをFINALにセットし、Collectionを”sm-Customer-notification”で絞って該当データをクリックします。すると、マッチしていると思われるドキュメントのURIが含まれていることがわかります。実際の運用では、この通知を元にユーザーが元データ同士を見比べ、手動でマージするかどうかを判断することになります。以上により、ビジネスに必要なデータを提供できるようになりました。ここで冒頭にご説明した課題が達成できているか確認してみたいと思います。顧客情報のフォーマットが異なるため、同一条件でのデータ検索が難しい⇒共通のエンティティを定義し、マッピングを行うことで同一条件でのデータ検索が可能になりました。検索して出てきた顧客が同一人物かどうかを手作業で判断しなければいけない⇒マスタリングの機能を利用することで、同一人物を自動的にマッチングすることが可能になりました。ここまで見てきたように、MarkLogicを利用することでデータをAs-Isで取り込める柔軟性だけではなく、データをしっかりと統合して欲しいデータを簡単に取り出すことが可能になります。Hubを活用することで、データ取込からデータ提供までの全てのサイクルを効率的に管理することが可能になり、よりアジャイルなプロジェクトを推進することが可能になります。Hubを活用して頂ければと思います。