Azure Data Factoryを使って、API Server(OData)経由でSharePointからAzure SQLにデータをコピーしてみる
今日は最近気になっていたAzure Data Factoryを触ってみました。
ただ、Azure Data Factoryって何?って声も多いと思うので、まずざっくりと概要です。
個人的には、Azure 版SSIS(SQL Server Integration Service)って呼んじゃっていますが
公式から引用すると、クラウドの完全管理型 ETL/ELT サービスっていうのが一番しっくりくるかと思います。
2年前のですが、以下のBlogがとてもわかりやすくて参考になりました。
日本マイクロソフトの大田さんのセッション資料もとてもわかりやすいです。
最近V2もプレビューに入り、SSISとの統合もさらに進んで、今なかなか注目(個人的に)のAzure PaaSの一つです。
今回試してみたこと
Azure Datafactoryではウィザード形式でクラウドデータソース間でのデータコピーアクティビティが簡単に構成できます。
コピー アクティビティを使用したデータの移動(V1)
例えば、Azure SQL DatabaseからAzure Blob Storageに移動したり
CosumosDBからAzure Searchにデータを投げ込んだり
ただ、そこまでコネクタが多いわけではなく、かつAzure/Microsoft サービス系に偏っている感じです。
なので、今回私の大好きなODataコネクタを利用して、Datafacotryが対応していないデータソースをCData API Server経由で増やすというアプローチを試してみました!
以下のような感じです。
API Serverがあれば、90種類ほどのデータソースをOdataとして扱えるようになります。
今回はその中からイメージしやすい一例としてSharePointをデータ・ソースに、Azure SQL にオールクラウド・オールPaaSでデータをコピーさせてみました。
ちなみにこの記事はCData Software User Group Advent Calendar 2017の19日目です。
接続元の構成
まずはそれぞれの接続サービスの確認です。
データソースはSharePint Onlineのタスクを対象にし、
接続先はAzure SQL Databaseで、移行先のテーブルを以下のように構成しました。
ODataとしてSharePoint接続を可能にするためのAPI Serveの構成
最初にSharePointをDatafactoryにつなげるようにするために、ハブとしてAPI Serverを構成します。
Azure Web Apps上にAPI Serverの構成する場合は、以下の記事を参照ください。
API Serveを構成後、SharePointの接続先を追加します。
接続先一覧から、SharePointを選択し
接続先となるSharePointサイトのURLとID・パスワードを入力します。
接続後、リソースとしてタスクのエンドポイントを定義します。
リソースから[リソースを追加]をクリックし
先程追加したSharePointの接続先を選択
タスクが格納されているテーブルを選択し
Azure SQLに連係する項目を選択します。
今回はシンプルにSubject、ID、AssingToだけにしています。
あとは、接続時に使用するユーザーを構成すれば、準備完了です。
Azure Data Factoryの構成
それでは、実際にAzure Data Factoryを構成していきましょう。
Azure管理ポータルから、Data Factoryを検索し[作成]をクリックします。
コピーアクティビティは現在V1でしかウィザード形式で構成できないので、バージョンでV1を選択します。
それ以外は任意の値を入力してください。
これだけで、Azure Data Factoryのベースは構成完了です。
コピーアクティビティの構成
さて、実際にデータコピーのアクティビティを構成します。
Azure Data Factoryの管理画面から、[データをコピー(プレビュー)]をクリックします。
すると別ウィンドウで、ウィザード画面が立ち上がります。
ここでTaskNameと、今回は一回こっきりのコピーを試すので、[Task cadence or Task Schedule]から[Run Once Now]を選択して、[Next]をクリックします。
次にコピー元のソースを選択します。
今回は先程構成したAPI ServerのSharePointに接続するので、ODataを選択します。
ODataを選択後、Odata Connection のプロパティを定義する画面に移るので以下のように各種プロパティを設定します。
DataSourceType ← Cloud Data Sourceを選択
Service URL ← API ServerのWeb APIエンドポイントURLを指定
Authentication Type ← Basic Authenticationを選択
User Name ← API Serverで構成したユーザーIDを入力
Password ← API Serverで構成したユーザーのAuthトークンを入力
正常にOdataに接続できれば、次の画面で以下のような形でAPI Serverで構成されたWeb API リソースの一覧が表示されます。
ここから、先程構成したSharePoint Taskのエンドポイントを選択し、データが正常に表示されていることを確認の上、[Next]をクリックします。
次は、データコピー先の定義です。ちなみにOdataをデータコピー先に指定できないので、要注意。
今回コピー先はAzure SQL Databaseを対象にするので、以下の通り選択し[Next]をクリックします。
Azure SQL Databaseの接続情報を入力して、[Next]をクリック(詳細は省きます)
接続完了後、DestinationのプルダウンにAzure SQL Databaseのテーブル一覧が表示されるので、コピー先とするテーブルを選択します。
あとは、データ・ソースと移送先の項目マッピングを行って完了になります。
ここで型が合わない等あればエラーが返ってくるので注意しましょう。
最後に失敗時の細かな設定等が出てきますが、今回は割愛。
標準のまま[Next]をクリックします。
全体構成の確認画面が出てくるので、確認の上[Next]をクリック
Validationが通れば、コピーアクティビティの実行が開始されます。
Datafactoryでちょっとおもしろいのが以下の画面ですよね。
このような画面で各種パイプラインの状況や接続先の情報、失敗・成功状況等がグラフィカルに確認できます。
(この画面で開発もできるようになればいいのにと思わずにはいれません。)
無事Successになれば、以下のようにAzure SQL Databaseにデータのコピーが生成されます。
おわりに
Azure はFlowやFunctions等、データ統合のサービスが様々あって楽しいですね。
中でもData Factoryはクラウド上でデータを集約するのに、とても向いているサービスだと思います。