SharePointのデータをPowerShell+ CData ODBC Driverを利用して、Azure SQL Serverにレプリケートしてみる
CData Software User Group Advent Calendar 2017もとうとう22日目となりました。
もう年末まで1週間ほどですね。
さて、今回はCData Driverの中でも、意外と問い合わせがあり、使っている方が多いらしい機能、Replicateについて触れていきたいと思います。
Replicate機能って何?
CData Driverでは、キャッシュ機能と呼ばれる、クエリ結果を対象のDBにキャッシュし、データクエリのパフォーマンスを向上させたり、Offilineで使ったりすることができるキャッシュ機能をサポートしています。
キャッシュは設定にもよるのですが、基本的にはクエリを実行した時に、そのクエリ結果のみを控えます。
それに対して、Replicate機能は明示的に、対象テーブルを別なDBにまるまるコピーすることが可能で、かつ自動的に新しい行の追加、変更された既存の行の更新、削除された行の削除を行います。
さて、この機能、私自身結構何が嬉しいの?(中の人が言うことじゃない)って感じの機能だったんですが、思いの他展示会でも、サポートでも問い合わせがあります。
特にお話にあがるのは以下の2点
[クラウドデータのバックアップのため]
結局クラウドのデータの管理って、SaaSベンダーさんのコントロール次第なところが、いい意味でも悪い実でも存在してしまうんですよね。そこを完全にデータベースのバックアップ・復元可能とまでは行かないまでも、最悪の手段としてローカルDBに保持しておきたいという要望はままあるようです。
[BIのため]
ポイントは2つで、大量データのアクセススピードの担保と多様のデータ変換方法の確保です。いくらネットワークが高速化しようと、TCP/IPレイヤーはやはりローカルのアクセススピードに叶いません。そこをローカルDBにレプリケートすることで担保しようという方も居ました。
今回試すこと
今回は、以下のようにローカルマシンにCData ODBC SharePoint Driverをインストールし、PowerShellからReplicateを実行してみます。
Raplicaste先はSQL Server・SQLite・MySQL・Oracle・PostgreSQLから選択可能ですが、今回はせっかくなのでCliudベースでAzure SQL Databaseを選んでみました。
事前準備
必要なものは以下のとおりです。
予めSharePoint Onlineを構築しておくのはもちろんのこと
Azure SQL Databaseも構築しておきましょう。
必要な情報はサーバー名とID・PW、それからローカルからアクセスするのでファイアウォールでIPアドレスのアクセス制限を解除しておく必要があります。
あとは、CData SharePoint ODBC Driver をインストールすればOKです。
CData SharePoint ODBC Driver は以下から30日無償版が取得ができます。
Microsoft SharePoint Drivers - ダウンロード
インストール後、ODBC DSNの設定画面が表示されるので、ID・PW・URLなどを設定します。
ここでポイントになるのが、Cache ConnectionとCache Providerの値です。
ここの値で、キャッシュを行う対象のデータベースの種類と接続先を設定します。
Cache ProviderにはSQL Sesrver用として、[System.Data.SqlClient]
Cache Connectionには[Server=.database.windows.net;Database=;User=;Password=****;]のような形でAzure SQLの設定値を入力します。
スクリプトの実行
それでは、Power Shellから実行してみます。
今回は明示的にCacheデータを設定するので、専用のクエリを実行します。
ちなみに、今回はPowerShellでの実行例として記載していますが、普通にDB接続ツールから同じクエリを叩いても実行することができます。(ADO.NET・JDBCなどでも実行可能です)
実行すると以下のような形になります。
Azure SQLでも覗いてみると、以下のようにデータが生成されていることがわかります。
おわりに
ちなみに、ScriptもSQLも書きたくないよーという方には以下のSyncサービスがおすすめです。
UIベースで全部同期処理を構成することが可能です。