Azure Data Factoryを利用してAzure StorageのデータをDocumentDBにコピーする

データ移動サービスのAzure Data Factoryを利用してみます。

Azure Storageに限らず、オンプレミス環境のMySQLなどからもインポートできるようですが、Azureの世界の中でのデータコピーをやってみます。

# 前提
- Azure の課金アカウントを持っていること
- Azure Storageをアクティベート出来、何らかのデータを保存していること
- Azure DocumentDBをアクティベート出来、コレクションとデータベースを作成していること

関連記事にて、Azure Storageにデータ投入する方法を記載しました。Webブラウザからアップロードするのが簡単だと思いますが。参考まで。

> 64MB以下（Azure Storage SAS access 延長戦【主にREST API sample code】）
> http://qiita.com/snomoto/items/a24b34ebb111706679e8


# Azure Data Factoryの設定
2016年12月現在、米国西部・米国東部・ヨーロッパ北部リージョンでしかリソースをアクティベート出来ないのですが、データをコピーする動きをするだけなので、日本リージョンのStorageからDocumentDBへのコピーなどは問題なく実施出来ます。

<img width="512" alt="スクリーンショット 2016-12-12 13.22.34.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/d7ef2932-b056-ba22-1e24-ff4e0a848925.png">

- GUIツールが用意されているようなので、そちらを利用してみます。
 
<img width="512" alt="スクリーンショット 2016-12-12 13.47.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/4870b89a-1a2b-7349-c3df-f3f94b01594b.png">

- 日時のバッチ処理的なコピーするスケジュールなども設定できます。

<img width="512" alt="スクリーンショット 2016-12-12 13.50.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/294cff89-aa3e-b774-646b-01fa738f561a.png">

- データ元としてAzure Storageを指定します。

<img width="512" alt="スクリーンショット 2016-12-12 13.51.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/2a078139-df93-6726-009e-c3432d0a769b.png">

<img width="512" alt="スクリーンショット 2016-12-12 13.51.57.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/e9757196-3ec5-eb2e-9dc7-b2abb58b60fe.png">


- コピーするデータを指定します。JSONの形式に問題があるときは、この時点でエラーが出力されます。

<img width="512" alt="スクリーンショット 2016-12-12 13.52.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/b93e8422-b7f4-d173-2d22-537230500b13.png">

<img width="512" alt="スクリーンショット 2016-12-12 15.17.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/9a4ba06e-8dc0-c108-23bc-175ebe0ef05a.png">



- 仕向け先のDocumentDBを指定します。  

<img width="512" alt="スクリーンショット 2016-12-12 15.17.35.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/f97a35f4-d29d-a472-ee67-a80c72634b0a.png">

<img width="512" alt="スクリーンショット 2016-12-12 15.19.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/2f119183-d695-bf8d-903d-430432b87033.png">


<img width="512" alt="スクリーンショット 2016-12-12 15.40.49.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/e9b4f24c-a629-f65e-7cdc-60a66aed9f43.png">

- 保存して実行します。

<img width="512" alt="スクリーンショット 2016-12-12 15.41.19.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/0ebe70cd-ce57-e5fc-7542-c4e1e7ad8936.png">

# Azure Data Factoryの実行
単に保存して実行したらエラーが出ました。裏ではアクティベートが終わってないのかも知れません。
改めて、ダッシュボードから実行してみます。

<img width="512" alt="スクリーンショット 2016-12-12 16.08.22.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/713884e3-525c-7f9b-3fc7-b4540bfc5c1a.png">


<img width="512" alt="スクリーンショット 2016-12-12 16.08.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/710acf67-a788-a9cb-afd6-c31867462500.png">

<img width="512" alt="スクリーンショット 2016-12-12 16.09.08.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/bd06f663-e0c0-ca2d-9a63-59f737d8917b.png">

- GUIがすぐには更新されないのですが、少し待つと表示が変わります。

<img width="512" alt="スクリーンショット 2016-12-12 16.25.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/6f363955-5b1f-d5d3-9d72-1ff5c46d0f2b.png">


- エラーが出ました。。。

```
Copy activity encountered a user error at Sink side: 
ErrorCode=UserErrorDocumentDBWriteError,
'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,
Message=DocumentDb operation failed: 
Message: {"Errors":["Request size is too large"]}
```

- 今回はデータをコピーするだけなので、一旦スケールアップしてみます。

<img width="512" alt="スクリーンショット 2016-12-12 16.37.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/bd24f945-2808-26ae-1fad-a25812241f9f.png">


- 改めて実行し、DocumentDBの「ドキュメントエクスプローラー」からデータを確認します。

<img width="512" alt="スクリーンショット 2016-12-12 16.49.42.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/0d6aab57-201e-43b0-7c7c-ef7edb6fd5cd.png">

以上。

## Azure StorageのデータをAzure Storageにコピー
*2016年12月追記*
Data Factoryはスケジュール実行ができるのですが、上記のGUIの流れの中では、DocumentDBに対してはファイル名に日付を付与できません。
使い勝手の良いAzure Storageをアーカイブ代わりに使ってみます。

上記の流れの中で、出力ファイルの名前をセットするときに、年月日を自動で付与するように設定できます。

<img width="512" alt="スクリーンショット 2016-12-14 17.56.52.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/49730a78-788d-86de-4abe-a568d5f63846.png">

- フォルダを自動で作らせるとき

例えばですが、"Folder path"の欄に、以下のようにするとStorageのコンテナー内にフォルダが自動で作成されます。

```
コンテナー名blob/{year}/{month}/{day}/
```

結果は以下のスクリーンショットの通りです。
<img width="512" alt="スクリーンショット 2016-12-14 18.43.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/fc09eba1-ab23-7386-188e-5afb20c9b2fd.png">

- ファイルの接頭語として日付を付与する

Fileの接頭語として日付を付与する場合は、Filenameを下記のようにします。

```
{year}{month}{day}data

```
結果は以下のスクリーンショットの通りです。
簡単に日次でデータをアーカイブ化できますね。
<img width="512" alt="スクリーンショット 2016-12-14 18.45.48.png" src="https://qiita-image-store.s3.amazonaws.com/0/147747/95a13169-bdc5-d519-cf5e-1281a0f62a8d.png">


# おわりに
兎にも角にも、データのコピーが出来ました。簡単ですね。