1. はじめに
皆さんこんにちは。
今回では、BLOBストレージ上に存在するファイルの名前を、パイプラインの判定処理に利用する方法を説明していきます。
用途としては、下記が挙げられます。
- BLOBストレージ上にファイルAが存在する場合のみ、コピー処理を実施し、その後に特定の処理を実施したい
- BLOBストレージ上にファイルAとファイルBが存在する場合のみ、後続のパイプライン処理を続行したい
※ 任意のファイルのみで処理が完結するのであれば、データフローで実現できるかもしれませんが、複数ファイルを用いた判定や、後続で複雑な処理をしたい場合には、今回説明するような判定処理が役立つと考えられます。
今回は例として、BLOBストレージ上にファイル名の異なるExcelファイルが3つ存在し、各ファイルが存在する場合のみコピー処理を行うパイプラインを作成していきます。
2. 作成するパイプラインの全体像
- アクティビティ「Get Metadata」
BLOBストレージ上のファイル名一覧を取得します。 - アクティビティ「If Condition」
アクティビティ「Get Metadata」の出力結果に含まれるファイル名一覧を用いて、ファイル存在チェックを行います。
3. 判定処理用のデータセットを作成する
以下の構成通り、Blobストレージのコンテナ「container001」に、3つのExcelファイルが存在すると想定します。パイプラインアクティビティ「Get Metadata」で使用する、コンテナ「container001」配下のファイル名一覧を取得するためのデータセットを作成していきます。
① ADFポータル画面で「新しいデータセット」をクリックする。
② Azure BLOB ストレージを選択して、「続行」をクリックします。
③「Excel」を選択して、「続行」をクリックします。
④ データセットの構成情報を入力します。
名前:データセット名を入力する(例: container001_dataset)
リンクサービス:Blobストレージへ接続したリンクサービスを選択する。
ファイルバス:各Excelが存在するBLOBストレージの1つ上のパスまで定義する(例: container001)
⑤「編集」を有効にして、「シート名」に「0」等の任意の値を入力します。
⑥「すべて発行」をクリックします。
4. 判定処理を作成する
次に、パイプラインを作成して、データコピーの前にExcelファイルの存在を確認します。
① ADF画面で「新しいパイプライン」をクリックします。
②「Get Metadata」を検索して、「Get Metadata」アクティビティをパイプラインにドラッグアンドドロップします。
③ アクティビティ名を「container001_metadata」に変更します。
④「設定」タブへ移動して、「データセット」項目で作成したデータセットを選択します。
⑤「新規」をクリックして、「フィールドリスト」項目で「子項目」を選択します。
※ 「子項目」を選択することで、データセット「Excel」で定義した、パス配下に存在するファイル名一覧が出力結果(子項目)に格納されます。
⑥ 次に、「If Condition」を利用して、Get Metadataアクティビティの出力結果に「test1.xlsx 」Excelファイルが存在するかどうか確認します。存在する場合、「データのコピー」アクティビティが実施されます。
⑦「If condition」を検索して、「If Condition」 アクティビティをパイプラインにドラッグアンドドロップします。
⑧「アクティビティ」タブへ移動して、「式」に以下のコマンドを入力します。
1 2 3 4 |
@contains( string(activity('container001_metadata').output.childItems), '"test1.xlsx"' ) |
- コマンド解説
string()関数にて、「Get Metadata」アクティビティの出力結果から、ファイル名一覧が含まれる子項目を文字列型として取得しています。
contains()関数にて、string()関数で取得した子項目の一覧に”test1.xlsx”が存在するかどうかを確認しています。
今回は例として、特定のファイル名が存在するかの式を記述していますが、And条件やlike関数を使うことで、複数条件やファイル名の部分一致を判定処理に用いることが可能です。
5. コピー処理を作成する
① “test1.xlsx”が存在した場合、「True」ケースのアクティビティが実施されます。
② アイコンをクリックして、「true」ケースに「データのコピー」を追加します。
③「データのコピー」を「true」ケースにドラッグアンドドロップします。必要な構成を設定して、「test1.xlsx」のデータをSQL serverへコピーします。
④ 次に、パイプラインの画面に戻ります。「Get Metadata」アクティビティと「If Condition」アクティビティを成功矢印リンクで繋がります。
⑤「test2.xlsx」と「test3.xlsx」2つファイルの存在を確認するための2つ「If Condition」アクティビティを作成します。「データのコピー」アクティビティを追加して、ExcelファイルのデータをSQL Serverにコピーします。
結果が以下の画像通りです。
6. まとめ
Azure Data FactoryでBLOBストレージ上に任意のファイルが存在することをパイプラインの判定処理に利用する方法について説明しました。
今回の記事が少しでもAzure Data Factoryを知るきっかけや、業務のご参考になれば幸いです。
Azure Data FactoryやAzure活用、マイクロソフト製品の活用についてご相談事がありましたらぜひお問い合わせください!
・Azure Data Factory連載シリーズはこちら
この記事を書いた人
- quanna