よしたく blog

ほぼ週刊で記事を書いています

Azure Data Factory でデータレイクから最新日付のファイルを取得する

f:id:yoshitaku_jp:20210827174443p:plain Azureを使ってデータ分析基盤を構築すると、Azure Data Lake Storage Gen2にデータを溜めていく事が多いです。 この日々溜まっていくデータから最新日付のファイルのみを取り出したいときに使えるテクニックです。

前提条件

前提条件として、XXX_yyyyMMdd.csvZZZ_yyyyMMddHHmmss.csvといった、同じファイル名の末尾に日時の情報がくっついているデータを取得するケースとします。

準備

パイプライン

まずはパイプラインに変数を用意します。今回は最新日付のファイルだったので、latest_filename としました。

次にアクティビティを用意します。 今回使うのはGetMetadata変数の設定です。2つとも「全般」の中に存在しています。

変数とアクティビティの設定が終わると、画像のようになります。

f:id:yoshitaku_jp:20210827170605p:plain

データセット

ファイルが置いてあるディレクトリへのデータセットを作成します。

ファイルパスの部分には「ディレクトリ」を設定し、「ファイル」の設定はおこないません。

f:id:yoshitaku_jp:20210827171509p:plain

GetMetadataアクティビティに、データセットを設定し、フィールドリストに子項目を設定します。

f:id:yoshitaku_jp:20210827171654p:plain

変数の設定

変数の設定アクティビティの変数タブへ移動し、下記の設定をします。

  • 名前
    • latest_filename
    • @last(activity('get_files').output['childItems'])['name']

ここでは、latest_filenameという変数に @last(activity('get_files').output['childItems'])['name']の値を入れています。 分解していくと、activity('get_files')は一つ前のアクティビティです。activity('get_files').output['childItems']は一つ前のアクティビティの出力結果の子要素、今回はactivity('get_files')のデータセットに、フォルダを指定していたので複数のファイル群になります。 その複数のファイル群の中からlast関数の実行結果である最後のファイルの['name']latest_filenameという変数に格納していることになります。

実行

今回はフォルダ配下に、2ファイル配置しました。test_20210609110816.csvが取得できれば良さそうです。デバッグ実行してみます。

f:id:yoshitaku_jp:20210827173418p:plain

get_filesアクティビティの出力結果は2ファイル取れています。

f:id:yoshitaku_jp:20210827173534p:plain

set_filenameアクティビティの出力結果は1ファイル、そして最新のファイルの結果が取れています。

f:id:yoshitaku_jp:20210827173554p:plain

まとめ

Azure Data Factory でデータレイクから最新日付のファイルを取得してみました。 デフォルトの機能をうまく使いこなすことで、少し込み入ったことも出来るようになりそうです。