Azure Data Factory（Azure Synapse Analytics）におけるSnowflakeコネクターの利用方法

この記事は [Snowflake Advent Calendar 2020](https://adventar.org/calendars/5085) の4日目の記事です。

## 概要
Azure Data Factoryにて、Snowflakeコネクターの設定手順を紹介します。
AzureのSnowflakeを運用している方にはおすすめのツールです。

Azure Data Factoryを紹介したうえで、簡単なパイプラインを作成する手順を提示します。
手順数は多いのですが、簡単な項目の入力とクリックで、データ同期が実施できます

### Azure Data Factory（Azure Synapse Analytics）で実現できること
ETLによるデータ連携やGUIによるデータプリパレーションが可能です。バッチ登録も登録やエラー箇所から再実行も可能であり、エンタープライズにおいて本格運用されているツールです。

| 利用できるコンポーネント | ざっくり説明                             | 主な用途                                                     |
| ------------------------ | ---------------------------------------- | ------------------------------------------------------------ |
| コピーアクティビティ     | データ抽出やデータ取り込みが可能な機能。 | インタフェーステーブル、または、増分更新型のテーブルへのデータ取り込み。 |
| Lookup アクティビティ    | SQLを実行できる機能。                    | ストアードプロシージャの実行。インタフェースファイルから、実テーブルへのMerge処理による差分更新が可能。 |
| マッピング データ フロー | Sparkをバックエンドに、GUIによるデータのパイプラインを実行する機能。         | データプリパレーション、GUIによるETLプロセスの構築。         |

## なぜAzure Data Factoryを利用すべきなのか
### 1. 対応しているコネクター数が多いこと
SalesforceやMarketなどの90以上のコネクターをソースに、データ取り込みが可能です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/8915d630-995e-79e0-52b5-8bd11b01bf39.png)
引用元：[Data Factory - データ統合サービス | Microsoft Azure](https://azure.microsoft.com/ja-jp/services/data-factory/#features)

### 2. GUIベースでのデータプリパレーションが可能であること
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/4de09bde-f512-3602-8614-78e8c1ac802e.png)
引用元：[マッピング データ フローの監視 - Azure Data Factory | Microsoft Docs](https://docs.microsoft.com/ja-jp/azure/data-factory/concepts-data-flow-monitoring)

### 3.従量課金なので使い始めやすいこと

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/9ee41a93-8901-3afc-d977-7d1183abf085.png)
引用元：[価格 – Data Factory | Microsoft Azure](https://azure.microsoft.com/ja-jp/pricing/details/data-factory/)

## 簡単なデータ同期の実施
### 事前準備
下記のアカウントを作成してください。

- Snowflake
- Azure Data Factory

### 1. Snowflakeにて、データベースとテーブルを作成

```sql
CREATE OR REPLACE DATABASE AZURE_DATA_FACTORY;

USE AZURE_DATA_FACTORY;
CREATE TABLE PUBLIC.WEATHER
(
    DateID int NOT NULL,
    GeographyID int NOT NULL,
    PrecipitationInches float NOT NULL,
    AvgTemperatureFahrenheit float NOT NULL
);

```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/5ee20277-a99e-1cf2-1e50-44c3fbc3e857.png)


### 2. Azure Data Factoryにログイン後、"Author"->"+"->"Copy Data tool"を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/f5acdbee-326a-7fc5-090f-47beaa57aba9.png)

### 3. "Next"を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/511cc83d-57d0-deb7-857d-6c5cd758ed31.png)

### 4. "Create new connection"を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/2c397f8b-a681-748d-0745-5bae1dca1501.png)

### 5. "blob"を検索し、"blob"を選択したうえで"Continue"を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/a9dde701-cbed-85c6-2984-44589ab32657.png)


### 6. 下記の項目を入力し、"Test Connection"を選択し、接続確認を実施。確認後、"Create"を選択。
| 項目      | サンプル値                                         |
| --------- | -------------------------------------------------- |
| Authentication method      | SAS URI                                 |
| SAS URL   | https://nytaxiblob.blob.core.windows.net/ |
| SAS token | "                                                  |
| Test Connections | To file Path                                                  |
| Test Connectionsの値 |2013/Date                                                  |
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/1b640f2f-4fa9-3df7-8ce2-ef70b84e8795.png)

### 7. "Next"を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/0daa9dcb-8a98-3272-5a16-1713c931c1bd.png)

### 8. "File or folder"に"2013/Weather/"と入力後、"Next"を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/d5ac3966-915a-fbb1-92fa-0a32990b8c68.png)


### 9. 自動で表示されるデータのプレビューを確認後、"Next"を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/ec0c100f-bdad-6f7c-6633-05680eb954da.png)

### 10.  "Create new connection"を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/9190ee39-f093-7844-41d9-520224bc8b74.png)

### 11. "Snowflake"を検索し、"Snowflake"を選択したうえで"Continue"を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/4b6277a4-e2b2-7c28-aee7-aaa577bb4ca6.png)

### 12. 下記の項目を入力し、"Test Connection"を選択し、接続確認を実施。確認後、"Create"を選択。
| 項目         | 入力項目                                                     | サンプル                |
| ------------ | ------------------------------------------------------------ | ----------------------- |
| Account name | Snowflakeアカウント名。URLの"snowflakecomputing.com"の前の部分 | hp54177.west-us-2.azure |
| User name    | ユーザー名                                                   | adfuser                 |
| Password     | パスワード                                                   | saaaa123344             |
| Database     | データベース名                                               | AZURE_DATA_FACTORY      |
| Warehouse    | 仮想ウェアハウス名                                           | COMPUTE_WH              |
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/bbe6d61d-4d8b-ca62-e362-96609652ba16.png)

### 13. "Next"を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/345c50b8-0549-a742-8f51-33a6fe7854b6.png)

### 14. "Destination"に"PUBLIC.WEATHER"選択後、"Next"を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/f0c4a3b9-e749-8463-f0dd-ae7fd13f32cd.png)

### 15. "Next"を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/8bbd212a-436b-f0c6-8534-757bae96cdc4.png)

### 16. "Next"を選択。 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/6f1e6d13-1f01-1e72-91f1-93656bb02f14.png)

### 17. "Next"を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/803a8cb9-055a-2a98-23cd-4614dfa6b703.png)

### 18. "Edit pipeline"を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/9df6205d-a8d5-ba85-3414-490f38e523a5.png)

### 19. "Debug"を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/9b13aaeb-16a8-8399-872a-e672628b4750.png)

### 20. データの取り込みが完了したことを確認します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/42fda272-5ad5-f327-ba52-b62da237c99c.png)

## 備考
### 1. Azure以外のSnowflakeへの書き込み（シンク）が実施できないようです。読み込みは可能です。
```text
ErrorCode=SnowflakeUnsupportedCouldPlatformForImport,'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,Message=Snowflake only support the account hosted in azure platform while as sink connector, please make sure your account is hosted in azure, current region and platform is 'AWS_US_WEST_2',Source=Microsoft.DataTransfer.ClientLibrary,'
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/24031/2aed1f48-6e20-22ff-0684-c357642c7920.png)