Morning Girl

Web API, Windows, C#, .NET, Dynamics 365/CRM etc..

大量の JSON データからスキーマを解析して、Azure SQL Database にレプリケートする:CData Sync

先日公開した「500万件を超えるTwitterリツイート データを取得・分析する方法」で取得したJSONデータをAzure SQL DataBaseにレプリケートして分析するアプローチを紹介しました。

bit.ly

ただ、元記事ではアプローチの紹介が中心で、実際の手順や機能に関する紹介ができなかったので、本記事で改めてこのCData Syncの使い方・およびJSONデータのスキーマを解析して Azure SQL DataBaseにレプリケートする方法を紹介しようと思います。

f:id:sugimomoto:20190205154120p:plain

CData Sync とは?

f:id:sugimomoto:20190205162252p:plain

https://www.cdata.com/jp/sync/

CData Data Sync シリーズは、Salesforce、Dynamics CRMSharePoint などのクラウド上の業務アプリケーションデータのレプリケーション(複製)をローカル DB およびクラウド DB に簡単に作成するサーバー製品です。

最近のバージョンアップで、CDataが提供している100+のドライバーを元にした Connector をリリースしたので、今回のユースケースのように JSONデータをAzure SQL DataBaseにレプリケートするというアプローチも可能になりました。

対象データ

対象となるデータは、前回のBlogで紹介したTwitterリツイートデータです。

f:id:sugimomoto:20190205154134p:plain

中身は以下のような構造体になっていて、ネスト構造がなかなか深い、解析しづらいJSONではないかなと思います。

f:id:sugimomoto:20190205154140p:plain

元の記事では、このJSONデータにどのようにスキーマ構造を与えて、Power BIなどのツールから接続しやすくするのか? といったお話も交えていました。

f:id:sugimomoto:20190205154148p:plain

もちろん技術的には様々な解説ポイントがあるのですが、CData Sync + JSON Connector を使うと、以下のように自動的にスキーマ構造を読み取り、テーブル化してくれるので、この記事ではこれといって特に難しい操作や設定は要求されません。

f:id:sugimomoto:20190205154154p:plain

最終的には以下のようにAzure SQL Database に格納された状態になります。

f:id:sugimomoto:20190205154200p:plain

必要なもの

・CData Sync 2019

・CData Sync JSON Connector

・Azure アカウント

CData Sync や JSON Connector はトライアル版が提供されています。

Azure アカウントは12ヶ月無料のトライアルアカウントがあります。

https://azure.microsoft.com/ja-jp/free/

レプリケート手順

それでは実際にレプリケートを行っていきます。

Azure SQL の構成

まず、レプリケート先となるAzure SQL Database を構成します。

Azure Portal にログインし、「リソースの作成」→「SQL Database」を選択

f:id:sugimomoto:20190205154229p:plain

任意の構成でデータベースを作成します。

ちなみに価格レベル次第でレプリケート速度が変わるので、データ量や同期頻度を考慮しながら設定するとよいでしょう。

f:id:sugimomoto:20190205154240p:plain

Azure SQL Database を構成したら、サーバー側のファイアウォール設定で接続元のIPアドレスを許可します。

今回はローカルマシンにCData Syncを入れるので、そのマシンから接続する際のIPアドレスを許可します。

対象のデータベース管理画面から「サーバーファイアウォール設定」をクリックし

f:id:sugimomoto:20190205154246p:plain

「+クライアントIPの追加」で、現在接続しているIPアドレスを自動的に登録し、「保存」を押します。

f:id:sugimomoto:20190205154252p:plain

以上でAzure SQL Database側の設定は完了です。

CData Sync のインストール

続いて、CData Syncをインストールします。

以下のURLにアクセスし「ダウンロード」をクリック

https://www.cdata.com/jp/sync/

f:id:sugimomoto:20190205154301p:plain

CData Sync は Windows 版と Linux などの Cross-Platform 版があるので、任意のプラットフォームを選択して、ダウンロードを行います。

f:id:sugimomoto:20190205154311p:plain

今回はWindows 版を選択しました。

ダウンロードできたインストーラーを立ち上げると、セットアップウィザードが表示されるので、画面に従ってセットアップを実施します。

f:id:sugimomoto:20190205154321p:plain

対象のデータソースコネクタをインストール(JSON Service)

CData Sync のインストールが完了したら、次に対象のデータソースコネクタをインストールします。

今回は JSON コネクタが必要なので、以下のURLにアクセスし、JSON serviceのところからダウンロードをクリック

https://www.cdata.com/sync/download/#sources

f:id:sugimomoto:20190205154332p:plain

同じようにセットアップを実施します。

f:id:sugimomoto:20190205154342p:plain

CData Syncの起動

CData Sync インストールが完了すると、以下のようにログイン画面が表示されるので、設定したID・PWでログインを実施します。

f:id:sugimomoto:20190205154353p:plain

この画面から各種設定を実施していきます。

f:id:sugimomoto:20190205154359p:plain

データソースの設定(JSON

それでは最初にデータソース側の設定を行います。

ナビゲーションメニューから「接続」→「データソース」を選択し、表示されているデータソース一覧の中から「JSON」のデータソースを選択します。

f:id:sugimomoto:20190205154407p:plain

次の画面で、JSON に接続するための各種設定を実施します。

f:id:sugimomoto:20190205154416p:plain

今回必要な設定は以下のようになります。

[設定] User admin(任意の文字列) Password admin(任意の文字列)

[Advanced] URI JSONが格納されたフォルダパス:例:C:\Work\ZozoTweets\test_01\ Data Model Relational

ポイントは「Advanced」のURIとDataModelです。

URIではJSONが格納されたフォルダパスを指定します。こうすることで、複数のJSONファイルを読み取ることが可能になります。

また、Data Modelは「Document」「Relational」「FlattenedDocuments」の3種類から選択できますが、今回はリレーショナルな形でデータを取り出したいと考えているので、「Relational」を選択します。

各モデルの詳しい機能は以下のQiita記事にまとめているので、もし詳細を知りたい方はこちらを参照してみてください。

qiita.com

あとは、「接続」ボタンをクリックして、接続検証を実施し、「Success」が表示されればOKです。

「変更を保存」してデータソースの設定は完了になります。

f:id:sugimomoto:20190205154445p:plain

同期先の設定(Azure SQL DataBase)

次に同期先の設定を行います。

同じく接続の画面から「同期先」を選択し、一覧の中から対象の同期先「Azure SQL Databae」を選択します。

f:id:sugimomoto:20190205154453p:plain

先程のデータソースの接続先と同じように接続情報を入力します。

f:id:sugimomoto:20190205154505p:plain

[設定] Server Azure SQL DatabaseのServerアドレス 例:cdatasyncsugimototest.database.windows.net Database 接続先となるデータベース名 User SAユーザーのID Password SAユーザーのPW

同じように接続テストを実施して、接続が確立できれば設定完了です。

「変更を保存」して設定を終了します。

ジョブの設定

それでは最後にデータソースと同期先の設定を元に、どのテーブルをどのように同期するのか?といった設定となるジョブを追加します。

ナビゲーションメニューから「ジョブ」を選択し「ジョブを追加」をクリックします。

f:id:sugimomoto:20190205154518p:plain

データソースと同期先の構成

ジョブの作成画面に移動後、まずソースと同期先の設定を確認します。

複数ソース、複数同期先を登録している場合は、ここで対象となるものをそれぞれ指定します。

f:id:sugimomoto:20190205154529p:plain

テーブルの追加

続いてデータソースから同期したいテーブルを選択します。

「+テーブルを追加」をクリックし

f:id:sugimomoto:20190205154537p:plain

テーブルの一覧が表示されるので、ここから任意のテーブルを選択します。

今回データソースとしているのはJSON データですが、すでにここでもととなるJSONデータからスキーマが自動的に識別され、テーブル構造として提供されているのがわかるかと思います。

Twitter Premium Search API で取得したJSON データは大本のオブジェクトが「results」になっているので、今回はこの「results」テーブルを選択して、同期します。

f:id:sugimomoto:20190205154549p:plain

カラムマッピングの構成

次に同期するカラムの構成を確認します。

追加したテーブル設定の横に「変換」のボタンが表示されるので、このボタンをクリックします。

f:id:sugimomoto:20190205154601p:plain

この画面からレプリケートするカラムの取捨選択や、レプリケートするデータのフィルタリング設定を行うことが可能です。

今回は特に設定を変更しませんが、不要なカラムはここで除外しておくと、後々BIツールなどで分析する際に楽になるのではないかと思います。

f:id:sugimomoto:20190205154609p:plain

スケジュールの構成

今回は一度きりのレプリケートですが、CData Sync ではスケジュールを構成して同期することも可能です。

1時間に1回や1日1回といった構成が可能になっています。

f:id:sugimomoto:20190205154618p:plain

詳細設定

詳細設定では、レプリケートでよく発生するエラーハンドリングやアプローチの設定を変更することができます。

特に文字列の自動切り捨てなどはJSONのオブジェクトが想定以上に長い場合などに、エラーで終了せず切り捨て登録などをしてくれるものになるので、対象のデータベースの設定次第ではチェックを入れていいと思います。

f:id:sugimomoto:20190205154626p:plain

実行と結果確認

すべての設定が完了したら、実行してみましょう。

一度「変更を保存」をクリックします。

f:id:sugimomoto:20190205154649p:plain

今回は手動で実行するため、対象となるテーブルを選択し「実行」ボタンをクリックするだけです。

f:id:sugimomoto:20190205154640p:plain

実行すると、以下のようにステータスが「Runninng」となり

f:id:sugimomoto:20190205154702p:plain

成功すれば、以下のように処理された件数が表示されます。

f:id:sugimomoto:20190205154708p:plain

SQL Server Management Stadio を起動し、対象のAzure SQL databaseにアクセスしてみると、以下のようにデータが取り込まれていることが確認できます。

f:id:sugimomoto:20190205154714p:plain

終わりに

いかがでしたでしょうか。CData Sync を使うことで、特に難しい設定もなく、JSONデータがRDBに取り込めます。

今回は Azure SQL Database でしたが、Google BigQuery や MongoDBにもレプリケートすることが可能なので、是非いろいろと試してみてください。