Azure DataFactory 構築手順

#はじめに

TableStorageに蓄積されたデータを別の環境に日次で差分コピーする必要がありました。
プログラムを書いてもよかったのですが、出来れば何か別の方法でできないかと模索した所Azure DataFactoryで実現できそうだったので試してみました。

#構築メモ
##データファクトリ作成
###メニューからデータファクトリを選択
何故か検索しても出てこなかったのでスクロールで探してきました。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/11027428-14e0-27d4-71bd-c7e0f4444640.png)

###データファクトリの作成を選択
2つ目以降は左上に追加ボタンがあります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/4d964f36-2253-de4a-f502-99f163453854.png)

##新しいデータファクトリ
###必要な情報を入力
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/e8452b57-7800-6a45-bb23-8ca01edaff77.png)

###しばらく待機
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/3a0de6f4-217b-9719-03a3-197d5d631deb.png)

###データファクトリ完成
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/729d3de2-b16c-5cb2-584b-04a7f0a533d1.png)

##データコピー処理の構築
今回はプレビュー機能のウィザード形式で構築していきます。UIを使って構築した後は作成されたJSONを別途保存しておき、JSONから同じ構成を複製していくと便利ですね。
※後にわかったのですが、ウィザード形式だと細かい設定ができない。かつあとで変更できなかったのでウィザード形式でひな形を作り実際に運用するものはJsonで作ったほうが良いです。

###データをコピーを選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/2bbbbd21-823f-82f9-2382-04e280e9d5d9.png)

###プロパティの入力
スケジュール実行なのか一度きりなのかを指定します　。
開始終了の期間は必要に応じて変更しましょう。ここの設定値はまだ調査中のため、理解できたら詳しく書きたいと思います。その他も特に指定がなければデフォルトのままでも問題ないかと思います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/6ac3d1b3-302e-9112-d9bd-189bf9c08409.png)

###コピー元の情報の入力
好きなデータ媒体から選択します。今回はTableStorageからTableStorageを対象にしています。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/18a1c8e4-13bf-8d73-4f36-40cc12f1682f.png)

####コネクション情報の入力
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/73a56777-3762-95c2-ef49-f98357fe4897.png)

####対象のテーブルを選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/5f7da0bc-e525-7e4a-c9ce-2de4ca99c91a.png)

####データの絞込条件の入力
今回は拡張性を考慮してCustomQueryを試してみます。
CustomQueryの場合Queryの入力値のチェックが行われます。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/a5061287-3152-b1a0-685c-3a6181a9e3f2.png)

###コピー先情報の入力
コピー元と同じように選択していきます。
####コピー先媒体の選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/a5bbb199-2b6c-a196-e709-c903b3d10184.png)

####コネクション情報の入力
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/31e1abee-c996-d02e-0b93-5850dfce498f.png)

####テーブルマッピングを選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/9c2af900-e696-09d8-66bf-2821caed10d1.png)

####スキーママッピングを選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/bba76c2c-55fe-93e7-a2ff-0afcba0d26dc.png)

###エラーが有った場合の挙動についての設定
エラーがあったら止める、エラーが有っても先にすすめる、エラーがあったらログに出力して先にすすめるから選びます。
ログに出す場合は出力先を設定します。
ここはお好みの設定で！
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/03fd7962-9ab0-ab7b-269e-b987a80250d0.png)

####パフォーマンス設定
エラー時の挙動の下の方にあります。ここはとりあえずオートで
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/99f6b739-d6c5-9661-80da-690afc96a399.png)

###設定した値の確認
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/b0c9e574-faa1-a6f3-6d50-35cd3bf62c51.png)

###設定値のデプロイ
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/71ec4cc4-fb79-63f6-aa01-4c02cc9661f6.png)

###デプロイ完了
あとは動いているか日々確認するだけです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/8cef09e5-30d3-64f0-bf6c-eca8ea89f431.png)

#確認方法
###監視と管理での確認
ポータルに戻ってプレビュー機能で確認できます
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/2f00dda3-0db2-3475-1801-69ac926a661e.png)
ここはいまいち使い勝手がわからないです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/2d075976-324c-2b72-1e07-f5ff605d4cc8.png)

ポータル側でも何か見れる方法はある気がしますかよくわからないので割愛
あとはコピー先にデータがコピーされているか実際に見てみるといいですかね。

#エクスポート
UIで設定した値をJSONでとっておくと次回以降の設定が楽になると思います。
###監視と管理（プレビュー）を選択
コンテンツ内のメニューからはLinkedServicesの設定値のJSONが取れません。。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/1f63bdbe-a3c3-374b-86e3-e0c8777421ec.png)

####resource explorerから順番にエクスポートするjsonを選択していく
pipeline
datasets
linkedservices
にjsonができていると思います。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/a32c5e01-f8aa-b366-5882-dff3544fca0f.png)

####Scriptエリアから自力でコピペしていく
resource explorerでjson名を選択すると右のほうのメニューからscriptにjsonの中身が表示されます。ブラウザのテキストからコピペしていきましょう
![image.png](https://qiita-image-store.s3.amazonaws.com/0/80457/053a4484-5291-4f0c-dc21-326cbe32fd98.png)

####jsonすべて上記作業を繰り返す
ひたすらコピーしていきます。

####コピーしたJsonの管理
ソース管理しておくと便利だと思います。

#まとめ
上記設定でスケジュール実行ができているようです。Dailyで実行だと日付をまたぐ前後のどちらかで実行されるという設定があるようです。
しかし名前の変更が不可能であるのとパイプラインとデータセットが紐付いた後にスケジューラの設定が変えられないという不便な点がありました。
変更する場合はデータセットを新規作成して、パイプラインをあたらしいスケジュールに合わせて紐付け先のデータセットを変更する必要があります。
TableStorageはPartitionKeyとRowkeyの設計がイケていれば速度の問題もクリアできそうです。
DBも自由度の高いSQLQueryをCustomScriptで実行できるのでかなり快適でした。
さらにDBではStoredProcedureの実行も可能でした。
何か機会があればSQLDataBaseとTableStorage以外も試してみたいと思います。

注意点として、使用頻度が高いとチャリンチャリンとどんどん吸い取られてしまうので、高頻度の場合は別のサービスのほうがいいと思います。