Azure Data Factory 使って CSV データを SQL Database にインポート

# 目的
私は SQL Server に慣れ親しんでいたので、普通に SQL Server Integration Services (以降、SSIS) を躊躇なく採用していました。
しかし、いざスタートアップで採用してみると、、、

- SSIS で ETL 開発したことがない
- てか、SSIS って何？
- え！ Visual Studio いるの？
- え！ Windows 環境でしか開発できないの？
- え！ ライセンス費用、こんなにかかるの！！！

という具合になる確率が非常に高いことを痛感しました。
できるだけ低コストで、でもちゃんとサポート受けられる製品・サービスのひとつとして、Microsoft Azure Data Factory で SSIS に変わる ETL 開発を実現できるかを検証してみました。

# 参考
[Copy data from Blob Storage to SQL Database using Data Factory](https://docs.microsoft.com/en-us/azure/data-factory/data-factory-copy-data-from-azure-blob-storage-to-sql-database)

# 準備
- Microsoft Azure サブスクリプション
    - 一部の MSDN サブスクリプションお持ちの方は、MSDN サブスクリプション特典で Azure をアクティブかできるはずです
    - Visual Studio Dev Essentials にサインアップすれば、１年間毎月 $25 分の Azure を利用できます
- Blob ストレージ アカウントを作成してアカウント名とアクセス キーをメモ
    - コンテナーも作成しておきます
- SQL Database (空のデータベース) を作成して、ユーザー名とパスワードをメモ
    - 作成する時、Azure サービスからのアクセスを許可しておきます
- 適当な CSV ファイルを作成

```csv:emp.csv
John, Doe
Jane, Doe
```

- 作成した CSV を先に作成した Blob ストレージにアップロード
    - 本家チュートリアルでは、Azure Storage Explore を使用していますが、Azure Portal からでもアップロードできます。
![スクリーンショット 2016-12-08 11.54.53.png](https://qiita-image-store.s3.amazonaws.com/0/107794/b621e78f-0e70-b255-0b50-af242036034a.png)


- SQL Database に作成するテーブルの DDL を作成

```sql:emp.sql
 CREATE TABLE dbo.emp
 (
     ID int IDENTITY(1,1) NOT NULL,
     FirstName varchar(50),
     LastName varchar(50),
 )
 GO

 CREATE CLUSTERED INDEX IX_emp_ID ON dbo.emp (ID);
```

できたら、Visual Studio Code で Azure SQL Database に接続して、テーブル作成します。
※ Visual Studio Code で SQL Server に接続する手順は[ここ](https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-develop-use-vscode)を参考に接続してみてください。

# Data Factory 作成
Azure ポータルで `Data Factory` を検索して、ウィザードに従って作成します。(詳細は割愛します)
作成したのち、ポータルで Data Facroty を開き、`データをコピー (プレビュー)`をクリックします。
![スクリーンショット 2016-12-08 13.07.05.png](https://qiita-image-store.s3.amazonaws.com/0/107794/961f1a56-4419-f060-63a6-7e74a007fb0f.png)

別な画面が開きます。`Task name`他、入力項目・選択項目は、ここでは既定のものを使用しますので、そのまま`Next`をクリックします。
![スクリーンショット 2016-12-08 13.22.08.png](https://qiita-image-store.s3.amazonaws.com/0/107794/8ae018da-7617-dbc8-6166-38f92cbb9367.png)

`Azure Blob Storage`を選択し、`Next`をクリックします。
![スクリーンショット 2016-12-08 13.22.30.png](https://qiita-image-store.s3.amazonaws.com/0/107794/e168a1bb-a3fa-9017-61ef-5a4564e2009d.png)

`Connection name`は自動で入力されているものを使用します。`Storage account name`は、CSV ファイルを格納しているものを選択し、`Next`をクリックします。
![スクリーンショット 2016-12-08 13.22.52.png](https://qiita-image-store.s3.amazonaws.com/0/107794/365bf331-8fa5-be5c-1997-17a47f2647c4.png)

`emp.csv`ファイルを選択し、`Choose`をクリックします。
![スクリーンショット 2016-12-08 13.23.47.png](https://qiita-image-store.s3.amazonaws.com/0/107794/cd4bbffa-2510-03da-d5ee-2adf141bab35.png)

選択したフォルダー名およびファイル名を確認し、`Next`をクリックします。
![スクリーンショット 2016-12-08 13.24.01.png](https://qiita-image-store.s3.amazonaws.com/0/107794/60b0e30a-c393-5092-c9f8-b16e90e7293b.png)

CSV ファイル フォーマットを確認し、下の方にあるプレビューで意図した形で認識しているかを確認したのち、`Next`をクリックします。
![スクリーンショット 2016-12-08 13.24.33.png](https://qiita-image-store.s3.amazonaws.com/0/107794/5a229936-e290-5d20-5e98-8670cf6c58cc.png)

取り込み先の設定で`Azure SQL Database`を選択し、`Next`をクリックします。
![スクリーンショット 2016-12-08 13.24.54.png](https://qiita-image-store.s3.amazonaws.com/0/107794/5aab8748-5716-cc55-b034-57933aafbd06.png)

`Connection name`は自動入力されたものを使用します。SQL Database Server およびデータベースを選択し、`User name`と`Password`を入力したのち、`Next`をクリックします。
![スクリーンショット 2016-12-08 13.25.20.png](https://qiita-image-store.s3.amazonaws.com/0/107794/bc0242ca-e2a8-e615-f3ae-b9c94f205100.png)

取り込み先テーブル (先に作成した emp テーブル) を選択し、`Next`をクリックします。
![スクリーンショット 2016-12-08 13.25.48.png](https://qiita-image-store.s3.amazonaws.com/0/107794/a1486998-bf42-499e-cf02-08e990117f21.png)

CSV の列とテーブルの列のマッピングを確認し、問題なければ`Next`をクリックします。
![スクリーンショット 2016-12-08 13.26.07.png](https://qiita-image-store.s3.amazonaws.com/0/107794/260e4820-b628-385f-40e7-37bc5c7a07b7.png)

ここの項目は、今回は特に設定しませんので、`Next`をクリックします。
![スクリーンショット 2016-12-08 13.26.22.png](https://qiita-image-store.s3.amazonaws.com/0/107794/722f6a7d-cfc7-16ae-c6c6-1ae989b6d15c.png)

サマリーを確認し、`Finish`をクリックすると、デプロイ開始となります。
![スクリーンショット 2016-12-08 13.26.34.png](https://qiita-image-store.s3.amazonaws.com/0/107794/68546b7f-1c00-c819-07a4-8fc0837d933e.png)

デプロイを開始したことを確認し、しばらく待ちます。
![スクリーンショット 2016-12-08 13.26.48.png](https://qiita-image-store.s3.amazonaws.com/0/107794/bb58c6d0-d8a4-af94-df36-c78ca531a3af.png)

取り込み完了したのち、`Click here ...`をクリックしてみましょう。
![スクリーンショット 2016-12-08 13.27.06.png](https://qiita-image-store.s3.amazonaws.com/0/107794/e162884b-7f10-0a48-764c-043a7d2a909b.png)

画面中央上ほどで歯車がぐるぐる回っているかと思います。取り込んでいる最中です。
![スクリーンショット 2016-12-08 13.27.32.png](https://qiita-image-store.s3.amazonaws.com/0/107794/daf7471b-bf41-3412-1d50-ed2173a99876.png)

取り込み完了したら、SQL Database にクエリしてみます。
![スクリーンショット 2016-12-08 13.31.59.png](https://qiita-image-store.s3.amazonaws.com/0/107794/fb05589d-4437-fd23-4faa-67d495db2d6d.png)

そうすると、ちゃんとデータが取り込まれていることを確認しました。ID 列は自動採番ですね。

# 感想
簡単なデータコピーであれば、そこまで難しくないと思います。
ちょっとデータ整形を必要とするものも Azure Data Factory ではできるはずなので、引き続き自分なりにまとめ見ようと思います。