2020年5月29日金曜日

Azure Data Factoryでzipファイルを展開して格納する方法について

Azure Data Factory (ADF) で、zipファイルを展開して格納する方法について記述します。
ADFのコピーアクティビティにはzipファイルを展開してくれる機能がありますが、いくつか注意点があります。
  • zipファイルはバイナリファイル、展開されたファイルはフラットファイル (Json、CSV等) になるので、コピーアクティビティの入力フォーマットは「Binary」、出力フォーマットは「Json、DelimitedText等」になると思われますが、コピーアクティビティでは入力フォーマットが「Binary」の場合は、出力フォーマットも「Binary」として定義する必要があります。
  • ワイルドカードでファイル指定をする場合は、データセットでファイルを指定せず、コピーアクティビティの設定でファイルを指定します。
  • コピーアクティビティにはファイル処理の中でエラー行をスキップする機能があるのですが、zipファイルが破損している場合、破損ファイルをスキップすることができません。つまり、複数のzipファイルをコピーアクティビティで処理させる場合には、事前にzipファイルの破損の有無をチェックしておく必要があります。
設定例を以下に記載します。こちらの例では、Azure Data Lake Storage Gen2のフォルダに複数のzipファイルが格納されており、これを抽出して展開、別のフォルダに展開されたファイルを格納するという処理を行います。
  1. 入力用のデータセットの設定
    • フォーマットを「Binary」としてデータセットを作成
    • File pathには、zipファイルが格納されているフォルダ (例:filesystem1/folder1) まで指定
    • Compression typeには、「ZipDeflate」を指定
  2. 出力用のデータセットの設定
    • フォーマットを「Binary」としてデータセットを作成
    • File pathには、展開されたファイルを格納するフォルダ (例:filesystem1/folder2) を指定
    • Compression typeには、「none」を指定
  3. コピーアクティビティのソースの設定
    • Source datasetには、1で作成したデータセットを指定
    • File path typeには、「Wildcard file path」を指定
    • Wildcard pathには、ファイル名 (例:filesystem1/folder1/*.zip) まで指定
  4. コピーアクティビティのシンクの設定
    • Sink datasetには、2で作成したデータセットを指定
    • Copy behaviorには、zipファイル内部の構造やファイル名を維持する場合は「Preserve hierarchy」、維持せずフラットな構造にする場合は「Flatten hierarchy」を指定 
      • 「Preserve hierarchy」を指定した場合は、zipファイル名のフォルダが作成され、その配下にzipファイルが展開されます
      • 「Flatten hierarchy」を指定した場合は、指定されたフォルダの直下に全てのzipファイルが展開されますが、ファイル名は勝手に生成されます