CData Software Blog

クラウド連携のCData Software の技術ブログです。

BoxにあるExcelファイルのデータをノーコードでMySQLに同期する

Boxは主に企業向けのファイル共有クラウドサービスで、セキュアなファイル共有とオンラインアクセスが可能です。

www.box.com

今回はBoxにあるExcelファイルのデータを、CData Syncを使ってノーコードでオンプレミスのMySQLに同期する方法を紹介します。

簡単なシステム構成を以下に示します。 通常、ExcelファイルのデータをオンプレミスのMySQLにコピーする場合、一度Excelファイルをローカルにダウンロードし、CSVファイルに変換したりサードパーティのデータコンバータなどを利用してMySQLにインポートします。 しかし、このような手動に頼った方法はファイル数や同期の頻度に伴って工数が増大します。

この課題に対し、今回はCData Software JapanのCData Syncを使って画面上の簡単な操作のみで同期を実行します。

f:id:urabe_shintaro:20200901183416p:plain

CData Syncは100種類以上のデータソースと、オンプレミスDBやクラウドDBとのデータ同期を行うツールです。 データソースのラインナップにはExcelファイルも含まれており、ローカルだけでなくBoxなどクラウドストレージ上のファイルも読み込むことができます。 サポートされているクラウドストレージ及び設定方法についてはCData Syncのヘルプをご覧ください。

シナリオ

今回は、以下に示す製造マスタデータが記録されたExcelファイル「ProductionMasterData.xlsx」の内容を、ローカル環境で稼働しているMySQLにレプリケートします。

f:id:urabe_shintaro:20200901183452p:plain

製造マスタデータのExcelファイルはBoxの「data」フォルダにあります。

f:id:urabe_shintaro:20200901183523p:plain

CData Syncのインストール

CData Software Japan社のSyncダウンロードページにアクセスしてください。 希望するプラットフォームの[DOWNLOAD NOW]をクリックすると必要事項の入力画面が表示されます。

f:id:urabe_shintaro:20200901183600p:plain

必要事項を入力し、[ダウンロード]をクリックするとCData Syncのインストーラがダウンロードされます。 ダウンロードしたファイルをダブルクリックするとインストーラが起動しますので、ウィザードに従ってインストールしてください。 インストールが完了すると自動的にSyncサービスが起動しログイン画面が表示されます。

f:id:urabe_shintaro:20200901183654p:plain

接続の作成

それでは実際にSyncの画面上でデータの同期を行います。 はじめに同期元と同期先の接続をそれぞれ作成します。

同期元:Excel接続の作成

同期元のExcelファイルへの接続を作成します。 [接続]メニューを開き、 [接続の追加][データソース]タブから「Excel」を選択してください。

f:id:urabe_shintaro:20200901183934p:plain

[データソース]タブにExcelが表示されていない場合、以下の手順でExcelコネクタをインストールしてください。

Excelコネクタのインストール

[データソース][Add More]をクリックしてください。

f:id:urabe_shintaro:20200901183715p:plain

以下のような[コネクタをダウンロード]画面が表示されます。 一覧から [Excel]をクリックしてください。

f:id:urabe_shintaro:20200901183727p:plain

コネクタのダウンロード画面が表示されますので[ダウンロード&インストール]をクリックしてください。

f:id:urabe_shintaro:20200901183737p:plain

Excel接続の設定

Excelコネクタを選択すると、以下のような 接続設定画面が表示されます。 [名前]に適当な接続名を入力してください。 [フォーマット設定][接続文字列]を選択すると接続文字列の入力欄が表示されます。

f:id:urabe_shintaro:20200901184000p:plain

表示された[接続文字列]に以下のような文字列を入力してください。

URI=box://<Box内のExcelファイルへのパス>;InitiateOAuth=GETANDREFRESH;

今回、ファイル「ProductionMasterData.xlsx」はBoxの「data」フォルダにあるため、<Box内のExcelファイルへのパス>にはdata/ProductionMasterData.xlsxと入力しています。

入力が完了したら [接続のテスト]をクリックし、以下のように「接続に成功しました」というメッセージが表示されることを確認してください。 接続に問題がある場合はエラーメッセージが表示されますので、その場合はBoxアカウントの設定や接続文字列を見直してください。 接続に成功することが確認できましたら [変更を保存]をクリックして接続を保存してください。

f:id:urabe_shintaro:20200901184030p:plain

[接続のテスト]をクリックしたときにBoxへの接続を許可する確認画面が表示される場合があります。 この画面が表示されましたら内容を確認し[Boxへのアクセスを許可]をクリックしてください。

f:id:urabe_shintaro:20200901184153p:plain

同期先:MySQL接続の作成

続いて同期先のMySQLの接続を作成します。 [接続]メニューを開き、 [接続の追加][同期先]タブから「MySQL」を選択してください。

f:id:urabe_shintaro:20200901184447p:plain

接続設定画面が表示されます。 [名前]に適当な接続名を入力し、接続先のMySQL[Server][Port][Database][User][Password]をそれぞれ設定してください。 設定後は[接続のテスト]をクリックして接続を確認し、[変更を保存]をクリックしてください。

f:id:urabe_shintaro:20200901184544p:plain

接続の確認

同期元のExcelと同期先のMySQLの二つの接続を作成しました。 [接続]メニューの[設定済みの接続]に、以下のように作成した二つの接続が存在することを確認してください。

f:id:urabe_shintaro:20200901184613p:plain

ジョブの作成

続いてExcelからMySQLへデータを同期するジョブを作成します。

[ジョブ]メニューを開き、[設定済みレプリケーションジョブ][ジョブを追加]ボタンをクリックします。

f:id:urabe_shintaro:20200901184639p:plain

ジョブ作成ダイアログが表示されます。 [ジョブ名]にジョブの名称を入力し、[ソース]に同期元の接続名、[同期先]に同期先の接続名をそれぞれ選択してください。 今回はExcelからMySQLへの同期のため、ソースに「Excel」、同期先に「MySQL」を選択します。 最後に[作成]をクリックするとジョブが作成されます。

f:id:urabe_shintaro:20200901184652p:plain

新しいジョブが追加され、以下のようなジョブ設定画面が表示されます。 この画面では同期対象のデータを選択します。 [テーブルを追加]をクリックしてください。

f:id:urabe_shintaro:20200901192257p:plain

Excelファイルのシートの一覧がそれぞれテーブルとして表示されるので、ここで同期対象のテーブルを選択します。 今回は全てのシートを対象とするため、全てのテーブルをチェックします。 チェック後に[選択したテーブルを追加]をクリックしてください。

f:id:urabe_shintaro:20200901184748p:plain

以下のように、ジョブに同期対象のテーブルが追加されました。

f:id:urabe_shintaro:20200901184826p:plain

これでジョブの作成は完了です。 続いてこのジョブを実行し、データを同期します。

ジョブの実行

実行対象のジョブの[ジョブ設定]画面を開き、[実行]ボタンをクリックします。

f:id:urabe_shintaro:20200901184838p:plain

ジョブの実行が完了すると、以下のように各テーブルのステータスが表示されます。 Record affectedの後に表示されている数字はコピーした行数です。

f:id:urabe_shintaro:20200901184909p:plain

実行結果の確認

MySQLに同期されたデータを確認します。 MySQL Workbenchからテーブルを確認すると、Excelにあった4つのシートがそれぞれテーブルとして作成されています。

f:id:urabe_shintaro:20200901184930p:plain

そのうちのproductsテーブルの内容を見ると、ProuductionMasterData.xlsxのproductsシートの内容がコピーされていることが分かります。

f:id:urabe_shintaro:20200901184947p:plain

ジョブの自動実行

紹介した方法では、手動でジョブを選択し[実行]ボタンをクリックして同期を実行しました。 Syncではジョブのスケジューラを有効にすることで実行を自動化させることができます。

実行対象のジョブの[ジョブ設定]画面を開き、[スケジュール]タブを開きます。 [スケジューラを有効にする]をチェックし、[Run job]に頻度とタイミングを設定してください。 例えば[Run job]に「Daily(日ごと)」を選択すると、タイミングとして実行時刻が選択できます。 以下の設定例では「毎日12:00」にジョブが実行されます。

f:id:urabe_shintaro:20200901185010p:plain

以下の設定例では「毎月10日の3:00」にジョブが実行されます。

f:id:urabe_shintaro:20200901185032p:plain

このようにジョブをスケジュールすることでデータの同期を自動的に実行させることができます。

おわりに

今回はBoxにあるExcelファイルのデータを、CData Syncを使ってMySQLに同期する方法を紹介しました。 CData SyncではMySQL以外にも様々なオンプレミスDBやクラウドDBを同期先として指定できます。

f:id:urabe_shintaro:20200901185043p:plain

CData Syncは30日間の評価版を無料でご利用頂けます。 クラウド上のファイルなど様々なデータソースとのデータ連携をご検討の方はぜひお試しください。