MarkLogic Data Hubを利用してどのようにしてデータ統合を素早く柔軟性を持って実施するかを、本記事と次回の二回に分けご紹介します。
* MarkLogic Data Hubの利用方法については必要に応じて下記ドキュメントもご参照ください。
*2020.3月日本語版5.1ページの公開・リンク差し替え及びQuick Start起動時の解説でのコマンド不具合を修正しました。
日本語版:https://developer.marklogic.com/learn/data-hub-quickstart-jp/
英語版:https://docs.marklogic.com/datahub/
チュートリアルを開始する前に、まずはData Hubを利用する際に推奨されるプロジェクトの進め方「データサービス・ファースト」について説明します。
「データサービス・ファースト」アプローチはMarkLogic データハブプロジェクトのデザインや構築を行う上で推奨される手法です。
データサービス・ファーストでは、まず解決したいビジネス上の課題を明らかにした上で、それを解決するためにプロジェクトを進めていくという方法を取ります。
下記の図で表現されるデータハブプラットフォームを例にして説明していきたいと思います。
一般のデータ統合といわれるプロジェクトでは左から右にプロジェクトを進めていくと考えがちです。
データサービス・ファーストの場合は下記の様に右から検討していく必要があります。
このようなアプローチを取ることで、プロジェクトがもたらすビジネス価値を必要最低限の作業工数で証明することが可能になります。
これはアジャイル開発を行う上で重要なポイントです。
それでは、この流れに沿ってまずは我々の顧客と解決するべき課題について考えていきましょう。
プロジェクトを効率的に進めるため、データサービス・ファーストのアプローチでは現在抱えている課題をしっかりと理解する必要があります。
また、課題が複数ある場合には、より優先度の高い課題から取り掛かります。
今回のチュートリアルでは、社内で異なる2つの顧客管理システムが運用されており、下記のような課題を抱えていると仮定します。
・顧客情報を取得する際に2つのシステムを検索しなければならない
・顧客情報のフォーマットが異なるため、同一条件でのデータ検索が難しい
(例:項目名が違う、データの書式(電話番号や日付など)が違うなど)
・検索して出てきた顧客が同一人物かどうかを手作業で判断しなければいけない
今回のチュートリアルでは、この課題をデータハブフレームワークで解決することを目指します。
Data Hubは、MarkLogicサーバー上でオペレーショナル・データハブを高速に構築するためのツールやライブラリなどをセットにしたものです。
MarkLogicを利用したプロジェクトでは、このData Hubのフレームワークを利用していただくことを推奨しております。
今回はQuickStartを利用して、新しいData Hubプロジェクトを作成していきます。
以上で、QuickStartが利用できる準備ができました。
ここで、ここまでの作業の結果を簡単に確認したいと思います。
まずは作成されたリソースを確認するため、Admin Console (http://localhost:8001)にアクセスします。
すると、data-hub-STAGINGとdata-hub-FINALという2つのデータベースと関連するデータベースが作成されていることがわかります。
Data Hubでは、As-Isで取り込んだデータがステージングDBに格納され、キュレートされたデータがファイナルDBに格納されます。
それでは、早速実際にデータを取り込んでいきます。
MarkLogic Data Hubを利用することでデータの取り込みに柔軟性を持たせることができます。
RDBMSのようにデータを取り込む前のスキーマの定義やデータ加工処理などは必要ありません。
※ただし、データモデリングそのものは必要です。データモデリングについてはキュレーションの項目で詳しく説明します。
それでは早速データの取り込みを行っていきます。
まずは今回のチュートリアルで利用するサンプルデータを作成します。
Data Hubのプロジェクトディレクトリ内にディレクトリを作成します。
cd /home/cent/dhf-project mkdir -p input/customer1 input/customer2 |
次に、下記をそれぞれ “customer1.csv” “customer2.csv”というファイル名でそれぞれ
input/customer1, input/customer2の下に保存してください。
その際、文字コードはUTF-8を指定してください。
例)Windows標準のメモ帳を利用する場合、「名前をつけて保存」→文字コードとしてUTF-8を選択し、「保存」をクリックします。
customer1.csv
id,Kanji_sei,Kana_sei,Kanji_mei,Kana_mei,Gender,Pref,Address,Tel,Date
0001,田中,たなか,一郎,いちろう,男,東京都,中野区中野1ー1−1,03-1274-7834,1990/3/31
0002,鈴木,すずき,大輝 ,だいき,男,千葉県,野田市清水33-1,03-2421-3416,1995/1/20
0003,佐藤,さとう,美咲,みさき,女,東京都,世田谷区北沢3-2-4,03-5621-3663,1997/6/5
0004,伊藤,いとう,健太,けんた,男,神奈川県,川崎市高津区5-3-2,07-3421-3456,1969/6/27
0005,吉田,よしだ,遥,はるか,女,東京都,渋谷区神宮前6-12-9,03-4563-2345,1964/4/14
0006,松本,まつもと,杏奈,あんな,女,東京都,千代田区丸の内3-2-1,03-5675-3466,1995/7/22
0007,清水,しみず,彩香,あやか,女,千葉県,柏市柏43-3-1,07-2324-5621,1974/7/2
0008,青木,あおき,諒,りょう,男,神奈川県,横浜市青葉区4-3-2,05-4233-4322,1981/5/2
0009,中野,なかの,達也,たつや,男,東京都,足立区千住12-4-3,03-5343-4356,1982/8/25
0010,坂本,さかもと,裕太,ゆうた,男,東京都,練馬区石神井町12-3-4,03-4452-3453,1983/9/11
customer2.csv
id,lname,fname,name_kana,sex,telephone,mail,address,birthday,bloodType
A0001,岡島,直人,オカジマナオト,M,03-9912-4519,naoto.okajima@xxx.co.jp,東京都八王子市大塚359,1973-10-8,A
A0002,下山,拓哉,シモヤマタクヤ,M,03-4566-4221,takuya.shimoyama@xxx.co.jp,東京都千代田区大手町2-6-7,1999-4-23,B
A0003,佐藤,美咲,サトウミサキ,F,03-5621-3663,misaki.sato@xxx.co.jp,東京都世田谷区北沢3-2-4,1997-6-5,AB
A0004,村上,愛,ムラカミアイ,F,03-1231-6532,ai.murakami@xxx.co.jp,神奈川県横浜市磯子区磯子3-5-1,1996-9-26,O
A0005,上田,大輝,ウエダダイキ,M,05-2356-6254,daiki.ueda@xxx.co.jp,千葉県中央区中央2-1-3,1979-5-21,B
A0006,森,萌,モリモエ,F,03-5662-1473,moe.mori@xxx.co.jp,東京都青梅市今井3-2-2,2000-11-3,A
A0007,新井,千尋,アライチヒロ,F,03-1454-7754,chihiro.arai@xxx.co.jp,東京都文京区小石川2-1-33,1980-9-2,B
A0008,杉山,早紀,スギヤマサキ,F,04-3234-1455,saki.sugiyama@xxx.co.jp,神奈川県横須賀市小川町3-1,1990-2-23,AB
A0009,中野,達也,ナカノタツヤ,M,03-5343-4356,tatsuya.nakano@xxx.co.jp,東京都練馬区石神井町12-3-4,1982-8-25,A
A0010,梅津,彩花,ウメヅアヤカ,F,03-2166-4455,ayaka.umedu@xxx.co.jp,千葉県我孫子市日の出11,1993-10-2,O
これで取り込むサンプルデータの準備ができましたので、次にデータの取り込みを定義していきます。
Data Hubでは、データの取り込みを行うためにFlowとStepというものを設定します。
Stepが一つの処理を表す単位(例:データ取り込み、など)で、複数のStepからFlowが構成されます。
7. IngestCustomer1というStepが作成されますので、下記の通り設定します。
※ Stepの設定項目はオートセーブされます
元々のカラムとその値がJSONのプロパティと対応していることがわかります。
また、データソースの名前やいつ取り込まれたかなどのデータの経歴などもヘッダの部分に保持されます。
なお、Data Hubでは、取り込まれたデータはエンベロープデザインパターンで扱われます。
エンベロープデザインパターンについて詳しく知りたい方は下記ブログを参照ください。
https://www.marklogic.com/blog/envelope-design-pattern-jp/
Flow name: Customer2
Description(任意): A flow to ingest and map Customer1
以上でcsvデータをそのままの形式でステージングDBに取り込むことができました。
ただし、取り込まれたデータは下記の通りデータの構造が異なっています(項目名やデータ形式が異なるなど)。
このままでは、同一条件での検索ができません。
実際にこれらのデータを検索してみましょう。
例として、中野さんを探すことを考えます。
今回の例では名字での検索を行いましたが、これ以外にも例えば誕生日で検索したい場合なども2つのデータソースの項目名を揃える必要があります。
次回の記事では、このように2つのデータソースで異なる項目名やデータ・フォーマットをどのようにして共通のデータモデルにキュレートするかご紹介します。
Like what you just read, here are a few more articles for you to check out or you can visit our blog overview page to see more.
In this post, we dive into building a full five-card draw poker game with a configurable number of players. Written in XQuery 1.0, along with MarkLogic extensions to the language, this game provides examples of some great programming capabilities, including usage of maps, recursions, random numbers, and side effects. Hopefully, we will show those new to XQuery a look at the language that they may not get to see in other tutorials or examples.
If you are getting involved in a project using ml-gradle, this tip should come in handy if you are not allowed to put passwords (especially the admin password!) in plain text. Without this restriction, you may have multiple passwords in your gradle.properties file if there are multiple MarkLogic users that you need to configure. Instead of storing these passwords in gradle.properties, you can retrieve them from a location where they’re encrypted using a Gradle credentials plugin.
Apache NiFi introduces a code-free approach of migrating content directly from a relational database system into MarkLogic. Here we walk you through getting started with migrating data from a relational database into MarkLogic
Don’t waste time stitching together components. MarkLogic combines the power of a multi-model database, search, and semantic AI technology in a single platform with mastering, metadata management, government-grade security and more.
Request a Demo