Azure Data Factory基本

# はじめに

Microsoftのトレーニング動画やリファレンスを読まずにざっくり始めたい人向けの基本的なことを記載します。自分のメモにも利用するので、もっと良い方法や正しい使い方があると思いますので、こちらに記載の方法にとらわれないようお願いします。

# ざっくり確認
ざっくりメニューに表示されている項目を見てみよう。

## パイプライン

ETLツールとしてここに変換の手順を記載していきます。
ファイルをとってきて、変換して、ファイルを出力する。

## データセット

ファイルの保存場所。
ファイルの出力場所。

## データフロー

変換処理

# つくってみよう

メニューではパイプラインが一番上に書かれているけれど、まずは、データセットを作成します。つまりは、ファイルをとってくる場所とファイルを出力する場所を決めてあげるのです。

## データセットの作成

フォルダを作成することもできます。ですが、これは画面上の見た目の整理のためだけです。と言うのは、フォルダが違えば、同じ名前のファイルを作れるというわけではありません。ファイル名はどこに保存されていてもユニークでなければなりません。

データストアにはいろんなものが使えますが、Azureなのでよく使うのはBlobでしょうか？
ここではBlobを使うこととします。
次に、データの形式を選択します。ここでハマりどころです。
ExcelやCSVなんかがよくあるデータ形式です。もちろん、データを変換するのであれば、正しいデータ形式を選択するのですが、変換しないでファイルをバックアップフォルダなんかにコピーするだけって時は、バイナリを選択します。
実務だとどうしても変換前のファイルをバックアップするって作業が出てきます。その時はバイナリを選択する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121550/75663a48-6306-6aca-29f5-374a7dbf2432.png)

画像はCSVと表示されてますが、DelimitedTextと記載されていて、これを選択するとTSVも扱うことができます。

ここでは、CSVを選択します。

次にリンクサービスが表示されます。リンクサービス・・・ようは、どのサーバーから取得するか設定します。新規を選択してサーバー情報を設定します。

コンテナ、ディレクトリ、ファイル名を選択します。（あとから変更することもできます）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121550/67ecde3b-2942-ea31-8d15-8e60f6cc3f2c.png)

スキーマを接続して実際のファイルから、サンプルファイルからもインポートできます。あとでインポートすることもできるのでここでは、なしを選択します。

複数のファイルを扱う時にはファイル毎にデータセットを作成しても良いのですが、パラメータを利用することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121550/2c5bb38c-c7cd-197a-d177-f708a4245603.png)

動的なコンテンツの追加から変数を設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121550/95193308-477b-91e5-6575-5dc1a8298c7e.png)

あとはCSVの形式を設定してあげる。変換先のデータセットも同じ要領でつくってあげれば準備完了。


## パイプライン設定

移動と変換のデータのコピーをパイプラインにドラッグ＆ドロップして、ソースとシンクにつくったデータセットを設定します。
パラメータを設定しているので、コンテナ、ディレクトリ、ファイル名を設定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121550/d8d507e9-9b60-6adb-bb18-a7c592f9c15d.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121550/2f5302f5-d25a-5842-360e-6189d121cfc5.png)

これだけだとデータセットをCSVを指定する必要はなくバイナリが簡単で早いです。そもそも、ADFを利用する必要はなくロジックアプリで簡単に作るのが良いです。

ということで、CSVの変換をやってみます。

データのコピーを削除します。（削除しなくても良いです）
データフローをドラッグ＆ドロップします。

データフローを新規作成します。

## データフロー設定

ソースの追加で元となるファイルを指定します。

右下の+から変換したい処理を選択します。ここではフィルタを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121550/c66058d4-7638-eb68-6b04-adbf9d61834c.png)

フィルターオンに式を入力します。ここでは、1列目がTestで始まっている行だけに絞り込むようにしました。

派生列を選択して、必要な列だけを選択して別ファイルに出力します

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121550/bcc3f2c2-48af-af47-edc9-636727457f24.png)

最後にシンク（宛先）を指定してあげます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121550/c3d27f8e-cafb-ff55-0d96-86f1a175bb37.png)

基本的な設定方法は以上です。これらを押さえておけば、フィーリングである程度のことはできます。（と言うかできないとETLツールを使う意味がないかなと思います。プログラム組めばいいやんとなりそう）

# Tips

## パイプライン全体で使用する変数

パイプラインの白いところをクリックしてあげると変数名を設定できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121550/3c2c10bf-87e1-33a4-21f1-6e9c52163fd1.png)

パイプラインで変数の設定をドラッグ＆ドロップして変数を競ってしてあげます

同様にパラメータを設定するとパイプライン実行時の変数（パラメータ）を設定することもできます。

## 日付取得

変数に日付を取得してバックアップフォルダ名にしたいときとかは以下のように取得します。

```
@convertTimeZone(utcNow(), 'UTC', 'Tokyo Standard Time', 'yyyy_MM_dd_HHmmss')
```

## ファイル削除

ファイル削除はデータセットを指定して指定ファイルを削除することもできるけれど、ワイルドカードを指定して一致するファイル全てを削除することもできます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3121550/15b02cd1-8e0b-f583-2851-3d81ca3ace11.png)

## きれいに作ってもフォーマットされる

自分が見やすいようにパイプラインを作っても、実際はJSONで書かれていて、開きなおすと自分が作ったパイプランの画面とは違ったものになっている。きれいに並べることを意識しないほうが良い。
画面の方で訳の分からないエラーが出たときは、JSONを直接編集すると直ることがある。

# 追記予定

・Azure Functions連携
・トリガー
・エラー通知
・API実行