Azure SynapseからSharePoint Online上のファイルを直接参照してデータロードする手順の紹介

技術者が語るMicrosoft Azure
利用者が日々メンテナンスするファイルを自動でAzure Synapseへアップロードできるようにしたいという要望はよくあると思います。
今回はその手順を紹介します。
1. SharePoint Online側の設定
まずは、Azure SynapseからSharePoint Onlineへアクセスできるようにする必要があります。
SharePoint Onlineの「サイト管理者」権限を持つユーザーで以下の設定を実施してください。
1-1. アプリIDを作成
https://[company_name].sharepoint.com/sites/[site_name]/_layouts/15/appregnew.aspxにブラウザでアクセスします。
[company_name]にはご自身の環境の値を、[site_name]にはアクセス権を設定するサイト名を指定してください。
以下のようなアプリ情報登録画面が表示されます。

1-2.各項目を設定・入力
①~⑤までの設定を行い、最後に⑥の「作成」を押します(1-1の画像参照)。
①クライアントID:「生成」ボタンを押して値を生成します。
(※この値は次の手順およびAzure Synapse側での設定で必要になりますので、どこかにコピーしておくことをお勧めします)
②クライアントシークレット:「生成」ボタンを押して値を生成します。
(※この値はAzure Synapse側での設定で必要になりますので、どこかにコピーしておくことをお勧めします)
③タイトル:アプリの表示名になります。
任意の値で問題ありませんが目的(Azure Synapse用の権限設定など)が分かるような値を推奨します。
④アプリ ドメイン:「www.localhost.com」とします(これ以外でも問題はありません)。
⑤リダイレクト先のURI:「https://www.localhost.com」とします(これ以外でも問題はありません)。
正常に作成されたことを確認し、「OK」を押します。

1-3. アプリへの権限付与
https://[company_name].sharepoint.com/sites/[site_name]/_layouts/15/appinv.aspxにブラウザでアクセスします。
手順1-1と同様ですが[company_name]にはご自身の環境の値を、[site_name]にはアクセス権を設定するサイト名を指定してください。
以下のような設定画面が表示されます。

①~③まで設定し、④の「作成」を押します。
①アプリID:手順1-2で生成した②の「クライアントID」を入力します。
②「参照」ボタンをクリックします。「タイトル」、「アプリ ドメイン」、「リダイレクト先の URL」は手順1-2で指定した値が表示されます。
③権限の要求 XML:以下のコードをそのままコピーして貼り付けます。
確認画面が表示されます。
「信頼する」をクリックします。

SharePoint Online側の設定は以上になります。
続いて、Azure側へのデータ取得へ進んでください。
2. Azure側へのデータ取得
次に、AzureのSynapse Analyticsサービスから、Synapse Studioを起動し、パイプラインを使ってデータを取得する手順を紹介します。
SharePoint OnlineのテナントIDがAzure Synapse側での設定で必要になります。
2-1. 「リンクサービス」、「データセット」の設定
■リンクサービス
種類 | HTTP |
---|---|
ベースURL | https://[company_name].sharepoint.com/sites/[site_name] |
認証の種類 | 匿名 |
■データセット(Excelファイル内のデータを取得する場合)
種類 | HTTP → Excel |
---|---|
リンクサービス | 上記手順で作成したリンクサービス |
ベースURL(例) | https://[company_name].sharepoint.com/sites/[site_name]/_api/web/GetFileByServerRelativeUrl(‘/sites/[site_name]/Shared Documents/[file_name]‘)/$value |
ワークシートモード | 名前 |
シート名 | シート名を直接記載するか、パラメータ化する場合は「@dataset().sheet_name」のように設定 |
■データセット(Excelファイルをそのまま取得する場合)
種類 | HTTP → バイナリ |
---|---|
リンクサービス | 上記手順で作成したリンクサービス |
2-2. 「新しいパイプライン」を選択

2-3.「Web」アクティビティを追加

2-4.「設定」タブで項目を設定
以下、①から④の項目を設定します。

① URL:以下のURLで赤字の部分をSharePoint OnlineのテナントIDに変え、設定します。
https://accounts.accesscontrol.windows.net/xxxxxxxxxxxxxxxxxxxxxxxxxxxx/tokens/OAuth/2
②メソッド:「POST」を指定します。
③本文:以下のコードを赤字の部分を変え、コピーして貼り付けます(改行無しの1行にしてください)。
grant_type=client_credentials &client_id=SharePointOnlineで生成したクライアントID@SharePointOnlineのテナントID &client_secret=SharePointOnlineで生成したクライアントシークレット &resource=00000003-0000-0ff1-ce00-000000000000/company_name.sharepoint.com@SharePointOnlineのテナントID
④ヘッダー:「新規」をクリックして以下の値を設定します。
名前 | Content-Type |
---|---|
値 | application/x-www-form-urlencoded |
2-5.「データのコピー」アクティビティを「Web」アクティビティの後に追加

2-6.「ソース」と「シンク」の設定
例)Excelファイル内のデータを取得する場合
ソース データセットには手順2-1で作成したデータセット(Excelファイル内のデータを取得する場合)を指定します。

①要求メソッド : GET
②追加ヘッダー : @{concat(‘Authorization: Bearer ‘, activity(‘Web1’).output.access_token)}
シンク データセットには「Delimited Text」を指定したデータセットを選びます。
例)Excelファイルをそのまま取得する場合

①要求メソッド:GET
②追加ヘッダー:@{concat(‘Authorization: Bearer ‘, activity(‘Web1’).output.access_token)}
シンク データセットには「バイナリ」を指定したデータセットを選びます。
2-7.確認手順
設定は以上です。
パイプラインをデバッグ実行して正常終了し、ストレージにファイルが連携されたことを確認できました(Excelファイルをそのまま連携した例)。


3. 最後に
最後に注意点ですが、SharePointのテナントが、2018年11月7日以降に作成されている場合、SharePoint側ではアクセストークンによるアクセスがデフォルトで無効になっているため、SharePoint Online 管理シェルを使用して以下のコマンドを実行し、無効にするオプションをFalseに設定する必要があります。
コマンド
set-spotenant -DisableCustomAppAuthentication $false
Webアクティビティで正常にアクセストークンが取得できているのに、その後のコピーアクティビティで401認証エラーが出てしまう場合には一度ご確認ください。