Azureでデータ分析基盤作ってみた - ①Synapseの構築

Azureでシンプルなデータ分析基盤を作る検証をしています。
Azure Portalで以下の構成を作ることができましたので、備忘録として構築手順をメモします。

## 構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398131/726ff053-aad9-5f39-551e-5f102a275d74.png)
1つのリソースグループの中にストレージアカウント、ADF、Synapseワークスペースを作成します。
ストレージアカウント(ADLS Gen2)に置いたcsvファイルをparquetファイルに変換すると同時に、データ型の変換も行います。
SynapseではサーバーレスSQLプールを使って外部テーブルを作成し、Power BIから外部テーブルを参照できるようにします。

## 作業内容
以下の順番で作業を行いました。
本記事では「1．Synapseの構築」について記載します。~~「2. ADFの構築とETL処理」と「3. 外部テーブル作成」についてはそのうち書きます（たぶん）。~~ ※ちゃんと書きました！(2024/12/17)

1. Synapseの構築
リソースグループ、ストレージアカウント、Synapseワークスペースを構築
[2. ADFの構築とETL処理](https://qiita.com/m-duct/items/3d90ce46dd4eabe565b8)
ADFインスタンスを構築後、ADFでデータ型の変換
[3. 外部テーブル作成](https://qiita.com/m-duct/items/615fc5acb562284c3a04)
parqutファイルを参照する外部テーブルをSynapseに作成してPower BIから参照する

## 今回の構築範囲
Azure Portalでリソースグループ、ストレージアカウント、Synapseワークスペースを一気に構築します。

### 作成するサービス
#### リソースグループ
Azureのリソースの最小の管理単位です。

#### ストレージアカウント
Azureのクラウドストレージサービスを使用するための基本単位です。
今回はBlob Storageの拡張機能を使ったAzure Data Lake Storage Gen2を使います。

#### Synapse Analytics
Synapse Analyticsは、データウェアハウスやビッグデータシステム全体にわたって分析情報を取得する時間を早めるエンタープライズ分析サービスです。
今回はデフォルト設定のまま構築作業を進めます。デフォルト設定のまま構築すると、Synapseワークスペースは共有仮想ネットワークに配置されます。

## 構築作業
Azure Portalを開いてSynapseを検索し、「Azure Synapse Analytics」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398131/40559df1-05f6-7d2d-8462-3fe90aff649f.png)

Synapseの画面で「+作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398131/a107ee8c-848e-af14-c7d9-dd927c3f0ed7.png)

基本タブに以下の情報を入力します。
- サブスクリプション：任意のサブスクリプションを選択します
- リソースグループ：「新規作成」をクリックして任意のリソースグループ名を入力します
- ワークスペース名：任意のワークスペース名を入力します
- 地域：任意の地域を選択します
- アカウント名：「新規作成」をクリックして任意のストレージアカウント名を入力します。ストレージアカウント名はAzure全体でグローバルに一意である必要があるので、ご注意ください
- ファイルシステム名：「新規作成」をクリックして任意のファイルシステム名を入力します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398131/7694b686-427d-2fe6-1d08-d7973675c047.png)

セキュリティタブに以下の情報を入力します。
- SQLパスワード：任意のパスワードを入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398131/3aa05c07-15d5-1928-379c-fa409986c051.png)

ネットワークタブはデフォルト設定のまま「次へ：タグ」をクリックします。
デフォルト設定のままにするとAzureの共有仮想ネットワークにSynapseが起動します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398131/205fd4aa-6738-1844-6cd8-b040dd1ed4de.png)

タグは任意のものを入力して「次へ：レビュー+作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398131/b80efdc1-7d84-5b84-f861-26f621f676ef.png)

設定を確認したら「作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398131/7de2b635-c9c2-ce36-fba0-5ccdc0fb1a6b.png)

10分ほど待つとデプロイが完了しました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398131/d614f299-c278-1f81-aa20-7e741281e455.png)

## 作成されたものを確認
### リソースグループ
blog-rgというリソースグループにblog-swというSynapseワークスペースとblogsaccountというストレージアカウントが作成されたことがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398131/842fdde3-5f55-39ac-63d6-30a4cba7bd57.png)

### ストレージアカウント
構築時に細かい設定はしませんでしたが、レプリケーションは読み取りアクセスgeo冗長ストレージ(RA-GRS)の設定でストレージアカウントが作成されました。
また、階層構造の名前空間が有効となっていることから、ADLS Gen2が有効になっていることがわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398131/c07a7072-5f38-4ba8-dbb6-9ef3c1eaeb21.png)

ストレージアカウントblogsaccount内にファイルシステム「blog-fs」が作成されていました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398131/6cb7596e-ee35-2c5f-1308-5936a469f68a.png)

ストレージアカウントのアクセス制御(IAM)のロールの割り当てを確認したところ、ストレージBLOBデータ共同作成者としてSynapseワークスペース「blog-sw」とAzure Portalを操作したユーザ「Hirano, Mayumi/平野真弓」が登録されていました。
Synapseワークスペース「blog-sw」がストレージBLOBデータ共同作成者として登録されているのは、作成時に基本タブの下の方に「指定された Data Lake Storage Gen2 アカウントに対し、ストレージ BLOB データ共同作成者 ロールを使用して、ワークスペース ID のデータ アクセスが自動的に付与されます。」と記載されていた通りですね。
「Hirano, Mayumi/平野真弓」が登録されているのは、基本タブで「ワークスペースでストレージBLOBのクエリを対話形式で実行するには～」にチェックが付いていたためです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398131/020b9cba-c691-10d8-8180-02d5853a2167.png)

### Synapse
Synapseワークスペースはこのような形で作成されました。
SQLプールの設定は特にしませんでしたが、組み込みのサーバーレスSQLプールが使えるようになっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398131/87157ad5-fc9e-8bcf-7187-d8b552a5a2f5.png)

Synapse Studioを開きData → Linkedを開くとストレージアカウントに作成したファイルシステムblog-fs内に何もファイルが存在しないことが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/398131/63faf15e-841a-1b29-5f60-63d1daea9a68.png)

# まとめ
Synapseワークスペースの作成画面からリソースグループ、ストレージアカウント、Synapseワークスペースが一気に作成できることが確認できました。
この記事がどなたかのお役に立てば幸いです。