CData Sync を使ってExcelファイルをMySQL HeatWave に同期してみました
はじめに
データの分析基盤として使用しているDBやDWHに対して、以下のようなデータを連携したい状況があると思います。
- オンプレミスもしくは、クラウド上に構築済みのシステムで生成された業務データ
- SalesforceやKintoneに代表されるクラウドサービス(Saas)内に格納されているデータ
各種API仕様を読み解き、分析担当者の要望や要求に合わせてデータ連携の仕組みを作り上げていくことは、もちろん可能です。
また、連携するデータをCSV形式ファイルで出力し、DB側で当該ファイルをロードするという運用もよく行われているものと思います。
今回は、CData Syncというツールを利用することで、より素早く簡単にDBへのデータ連携を実現する方法をご紹介したいと思います。
CData Syncは、CData Software社が開発、提供しているデータ連携用ツールとなります。
データの連携元がSaasの場合でも、一旦接続設定さえ確立できてしまえば、以降はその連携元のSaasを仮想的なRDBとみなすことが可能となります。その結果、データ抽出はSQLで簡単に実現できることが特徴のツールです。
システム構成イメージ
今回の検証環境は、OCI(Oracle Cloud Infrastracture)上に構築します。
システム構成イメージは、以下の図の通りです。
CData Syncが動作しているComputeインスタンスのOSは、Windows Server 2019を利用します。
MySQL Heatwave(MySQL HeatWave Database Service)は、トランザクション処理であるOLTP、データ分析処理であるOLAP、機械学習を意味するMLに対応可能なフルマネージド・データベース・サービスです。
なお、本環境のComputeインスタンスやMySQL HeatWaveインスタンスの構築手順については、本記事では割愛させていただきます。
連携シナリオ概要
- 連携元データ(データソース): サーバローカルに存在するExcelファイル
- データ同期先: MySQL HeatWaveのテーブル
今回の連携シナリオは、シンプルなものとなります。
サーバローカルのExcelファイルに含まれるデータをMySQL HeatWaveのテーブルに対して連携するシナリオを検証してみます。
利用するExcelファイル
検証で使用するExcelファイルは、総務省が以下のWebページで公開している「都道府県コード及び市区町村コード」を使用します。
https://www.soumu.go.jp/denshijiti/code.html
検証および説明の都合上、ファイル名を都道府県_市区町村.xlsx
とし、2つあるシートのシート名を団体
および政令指定都市
とします。
団体
シートには、ヘッダー行を除き、1,794件のデータ行が含まれています。
政令指定都市
シートには、ヘッダー行を除き、195件のデータ行が含まれています。
また、ヘッダー行に含まれていたセル内改行は削除しています。
このExcelファイルをCData Syncが動作するWindows Serverの以下パスに配置するものとします。
C:\tmp\都道府県_市区町村.xlsx
MySQL HeatWaveの必要な情報
構築済みのMySQL HeatWaveインスタンスに関して、いくつかの情報が連携設定の際に必要となります。
まず、MySQL HeatWaveのエンドポイント情報が必要となります。
OCIでの確認方法は以下の通りです。
OCI Webコンソールで左上の三本線のメニュー
→ データベース
→ DBシステム
の順にクリックします。
DBシステム一覧から対象のインスタンスを選択し、名前をクリックし、DBシステムの詳細画面でエンドポイント情報の内部FQDNを確認します。
また、連携データを格納するデータベース(スキーマ)、データベースユーザを事前に準備します。
その上で、データベース名およびそのデータベースを利用できるデータベースユーザ、パスワードを控えておきます
今回使用するHeatWave情報の例
情報名 | 情報値 |
---|---|
内部FQDN | mds4cdata.….vcndata.oraclevcn.com |
データベース(スキーマ) | test |
データベースユーザ | admin |
CData Syncのインストールから起動まで
では、Computeインスタンス上にCData Syncをインストールしてみます。
CData Syncは、Windows Server用の.Net版、クロスプラットフォーム用のJava版の2種類が提供されています。
今回は前者の.Net版を選択します。
ダウンロードおよびインストール
- ブラウザで以下URLへ移動
https://www.cdata.com/jp/sync/download/ - 以下画面でWindows(.NET Edition) の
ダウンロード
をクリック
- 入力必須項目を入力し、
ダウンロード
をクリックし、ローカルにファイルを保存
- ダウンロードした
CDataSync.exe
を起動 - 以下画面で
はい
をクリック
- 以下画面以降では、
次へ(N)>
、同意する(A)
、インストール
などを適切にクリック
- 以下画面で
完了(F)
をクリックし、インストールを完了
CData Syncの起動
インストールが完了したので、起動してみます。
- スタートメニューから
Start CData Sync Server
をクリック
- 表示された以下画面で、ユーザー:
admin
のパスワードを設定しユーザーを作成
をクリック
- ログインし、ライセンス情報を設定
インストール後、データ連携設定完了までのステップ
CData Syncの起動後、データ連携設定完了までは、以下の3ステップとなります。
- データソースを選択してコネクション設定
- 同期先を選択してコネクション設定
- 連携シナリオにもとづき、同期ジョブ(テーブル、抽出条件など)を設定
なお、ステップ1とステップ2については順不同です。
では各ステップを実行していきます。
ステップ1: データソースを選択してコネクション設定
CData Syncでは、データソース用(今回の場合Excel)のコネクタが必要となります。CData Syncのインストール直後には、Excel用のコネクタはないため、追加インストールする必要があります。
Excelコネクタのインストール
接続
タブのデータソース
タブをクリックし、Add More
をクリック
コネクタをダウンロード
画面でフィルタ欄にExcel
と入力し、表示されたExcel
をクリック
ダウンロード&インストール
をクリック
はい
をクリック
- インストールが完了すると、ログイン画面が再度表示されるので、ログイン
Excelコネクション設定
インストールしたExcelコネクタを利用して、コネクション設定を実施します。
CData SyncでExcelを仮想RDB化した場合、コネクションで設定したExcelファイルが仮想データベース(スキーマ)となります。
接続
タブのデータソース
タブをクリックし、Excel
をクリック
設定
タブで以下を設定
名前: 一意な名称 ※ここではConnect2Excel
とします
Advanced
タブで以下を設定
Excel File: 対象ファイルへのパス ※ここではC:\tmp\都道府県_市区町村.xlsx
設定
タブで接続テスト
をクリックし、接続に成功することを確認変更を保存
をクリック
ステップ2: 同期先を選択してコネクション設定
CData Syncでは、同期先として使用するDBやDWHのプロダクト(今回の場合MySQL HeatWave)に合わせてコネクタを選択し、コネクション設定を実施します。
MySQL HeatWaveですが、接続のためインターフェースは、通常のMySQLと同一となります。したがってCData Syncのコネクタとしては、MySQL用のコネクタをそのまま利用することが可能です。MySQLコネクタを利用して、コネクション設定を実施します。
接続
タブの同期先
タブをクリックし、MySQL
をクリック
- 以下を設定
名前: 一意な名称 ※ここではConnect2MDS
とします
Server: <MySQL HeatWaveのエンドポイントFQDN>mds4cdata.….vcndata.oraclevcn.com
Database: <作成したデータベース(スキーマ)>test
User: <データベースのユーザ>admin
Password: <データベースユーザのパスワード>
接続テスト
をクリックし、接続に成功することを確認変更を保存
をクリック
ステップ3: 連携シナリオにもとづき、同期ジョブを設定
連携シナリオとしては、2つほど準備します。
シナリオ3-1:全てのシートの全てのデータを同期する
データソースとなるExcelファイルに含まれる全シートをMySQL HeatWaveのテーブルとしてデータ同期します。
CData SyncでExcelを仮想RDB化した場合、各シートが仮想テーブルとなります。
同期先MySQL HeatWaveのテーブル名は、デフォルトではExcel側のシート名となります。
ジョブ
タブのジョブを作成
をクリック
- 新しいジョブを作成で以下を設定し、
作成
をクリック
ジョブ名: (任意の名称)jobtest1
ソース:Connect2Excel
を選択
同期先:Connect2MDS
を選択
レプリケーションの種類:全テーブルを同期
を選択
- 以下画面が表示されることを確認
シナリオ3-2:列の特定値を条件としてデータを抽出する
Excelファイルの団体
シートに含まれるデータのうち、市区町村名(漢字)
が空白の行のみをMySQL HeatWaveのテーブルとしてデータ同期します。
CData SyncでExcelを仮想RDB化した場合、各列が仮想カラムとなります。
本シナリオでの検索条件は、仮想カラム市区町村名(漢字)
の値がNULL(is null
)となります。
ちなみに、市区町村名(漢字)
が空白の行は、都道府県を表す行となり、この結果、47都道府県の情報が含まれる団体
テーブルとして同期されることになります。
ジョブ
タブのジョブを作成
をクリック
- 新しいジョブを作成で以下を設定し、
作成
をクリック
ジョブ名: (任意の名称)jobtest2
ソース:Connect2Excel
を選択
同期先:Connect2MDS
を選択
レプリケーションの種類:スタンダード
を選択
- ジョブ設定の
+テーブルを追加
をクリック
- テーブルを追加画面で
団体
を選択し、追加
をクリック
- ジョブ設定の
団体
テーブルをクリック
- タスク設定画面の
カラムマッピング
タブで一部の矢印部分をクリックし×
に変更することで以下状態にする
- タスク設定画面の
Advanced
タブのフィルタ欄の+Add rule
をクリックし、市区町村名(漢字)
、is null
を選択し、OK
をクリック
- ジョブ設定の
変更を保存
をクリック
同期ジョブの実行
連携設定が完了しました。
では、設定した同期ジョブを実行し、結果を確認してみます。
同期ジョブの実行方法は複数ありますが、今回は最もシンプルな手動実行で行います。
シナリオ3-1の実行
シナリオ3-1の実行結果確認
MySQL Workbenchを使用して、MySQL HeatWave側で同期ジョブの実行結果を確認してみます。
政令指定都市
テーブルのレコード数をカウントしてみたところ、195レコードという結果が得られました。
同じく団体
テーブルのレコード数をカウントしてみたところ、1,794レコードという結果が得られました。
それぞれのレコード数は、Excelファイルの行数と一致するとともに、これを合わせるとCData Syncが同期したレコ―ド数と合致していることが確認できます。
シナリオ3-2の実行
シナリオ3-2の実行結果確認
こちらのシナリオでも、MySQL Workbenchを使用して、MySQL HeatWave側で同期ジョブの実行結果を確認してみます。
団体
テーブルのレコード数をカウントしてみたところ、想定通り、47レコードという結果が得られました。
まとめ
CData Syncは、コネクションを確立することでデータソースを仮想RDB化します。
今回は詳細に検証していませんが、この仮想RDBに対して、SQLを発行し、抽出したデータを、同期先のDBに対して連携するツールとなります。
したがって、SQLで実現可能な結合処理や変換処理などが可能です。
Excelをデータソースとした場合、RDBのコンテナ技術要素に対応するExcle側の要素についてまとめます。
RDBの技術要素 | Excel側で対応する要素 | 今回の具体例 |
---|---|---|
データベース | Excelファイル | 都道府県_市区町村.xlsx |
テーブル | ファイル内の各シート | 団体 、政令指定都市 |
カラム | シート内の列 | 団体 シートのA~E列など |
カラム名 | ヘッダー行 | 団体コード 、都道府県(漢字) など |
レコード | シート内の行 | 団体 シートの2行目以降 |
今回は、CData Syncの基本機能の説明、検証となっています。
今回のシナリオのような単純なデータ同期であれば、SQLすら意識せずに実施することが可能でした。
今後、Excle以外の各種Saasをデータソース、MySQL Heatwaveを同期先としたデータ連携(データ取込み)を検証していく予定です。ご期待ください。
弊社は、CData SyncをはじめとするCData製品販売パートナーとなっています。興味を持たれましたら、お問い合わせいただければと思います。