ディレクトリ Auto Loader 一覧表示モードとは何ですか?

Auto Loader はデフォルトによるディレクトリリストモードを使用します。 ディレクトリ・リスト・モードでは、 Auto Loader は入力ディレクトリをリストして新しいファイルを識別します。 ディレクトリリストモードを使用すると、クラウドストレージ上のデータへのアクセス以外の権限設定なしで Auto Loader ストリームをすばやく開始できます。

ディレクトリ一覧モードで最適なパフォーマンスを得るには、Databricks Runtime 9.1 以降を使用します。 この記事では、ディレクトリリストモードのデフォルト機能と、 ファイルの字句順序に基づく最適化について説明します。

ディレクトリリストモードはどのように機能しますか?

Databricks は、 Auto Loader が他の Apache Spark オプションよりも効率的にクラウド ストレージ内のファイルを検出できるように、ディレクトリ一覧表示モードを最適化しました。

たとえば、 /some/path/YYYY/MM/DD/HH/fileNameとして 5 分ごとにアップロードされるファイルがある場合、これらのディレクトリ内のすべてのファイルを検索するために、Apache Spark ファイル ソースにはすべてのサブディレクトリが並行してリストされます。 次のアルゴリズムは、オブジェクトストレージへの API LIST ディレクトリ呼び出しの合計数を推定します。

1(ベース ディレクトリ)+ 365(1 日あたり)* 24(1 時間あたり)= 8761 コール

ストレージからフラット化された応答を受信することで、 Auto Loader API 呼び出しの数をストレージ内のファイル数を各 API 呼び出しによって返される結果の数で割った値に減らすことができ、クラウドのコストを大幅に削減できます。 次の表は、共通オブジェクトストレージの各 API 呼び出しによって返されるファイルの数を示しています。

呼び出しごとに返される結果

オブジェクトストレージ

1000

S3

5000

ADLS Gen2

1024

GCSの

増分リスト(非推奨)

重要

この機能は非推奨になりました。 Databricks では、増分リストではなく 、ファイル通知モード を使用することをお勧めします。

注:

Databricks Runtime 9.1 LTS 以降で使用できます。

増分リストは、Azure Data Lake Storage Gen2 (abfss://)、S3 (s3://)、GCS (gs://) で使用できます。

辞書式に生成されたファイルの場合、 Auto Loader は字句ファイルの順序付けと最適化されたリスト APIs を活用して、ディレクトリ全体の内容をリストするのではなく、最近取り込まれたファイルからリストすることでディレクトリリストの効率を向上させます。

デフォルトで、 Auto Loader は、以前に完了したディレクトリリストのファイルパスをチェックして比較することにより、特定のディレクトリが増分リストに適用可能かどうかを自動的に検出します。 auto モードでのデータの最終的な完全性を保証するために、 Auto Loader は 7 つの連続した増分リストを完了すると、完全なディレクトリ リストを自動的にトリガーします。 完全なディレクトリ リストの頻度を制御するには、特定の間隔で非同期バックフィルをトリガーするように cloudFiles.backfillInterval を設定します。

ファイルの字句順序

ファイルを字句順に並べるには、アップロードされる新しいファイルに、既存のファイルよりも辞書式に大きいプレフィックスを付ける必要があります。 語彙順ディレクトリの例をいくつか次に示します。

バージョン管理されたファイル

Delta Lake は、テーブル トランザクション ログに対して語彙順にコミットを行います。

<path-to-table>/_delta_log/00000000000000000000.json
<path-to-table>/_delta_log/00000000000000000001.json <- guaranteed to be written after version 0
<path-to-table>/_delta_log/00000000000000000002.json <- guaranteed to be written after version 1
...

AWS DMS は、バージョン管理された方法で CDC ファイルを AWS S3 にアップロードします。

database_schema_name/table_name/LOAD00000001.csv
database_schema_name/table_name/LOAD00000002.csv
...

日付でパーティション分割されたファイル

ファイルは、日付パーティション形式でアップロードできます。 この例をいくつか示します。

// <base-path>/yyyy/MM/dd/HH:mm:ss-randomString
<base-path>/2021/12/01/10:11:23-b1662ecd-e05e-4bb7-a125-ad81f6e859b4.json
<base-path>/2021/12/01/10:11:23-b9794cf3-3f60-4b8d-ae11-8ea320fad9d1.json
...

// <base-path>/year=yyyy/month=MM/day=dd/hour=HH/minute=mm/randomString
<base-path>/year=2021/month=12/day=04/hour=08/minute=22/442463e5-f6fe-458a-8f69-a06aa970fc69.csv
<base-path>/year=2021/month=12/day=04/hour=08/minute=22/8f00988b-46be-4112-808d-6a35aead0d44.csv <- this may be uploaded before the file above as long as processing happens less frequently than a minute

日付パーティションを使用してファイルをアップロードする場合、次の点に注意してください。

  • 語彙の順序を確保するために、月、日、時間、分にはゼロを埋めておく必要があります (hour=3 ではなく hour=03としてアップロードするか、2021/5/3ではなく 2021/05/03 としてアップロードする必要があります)。

  • ファイルは、親ディレクトリの時間粒度よりも処理の頻度が低い限り、必ずしも最も深いディレクトリに字句順にアップロードする必要はありません。

日付パーティションの字句順でファイルをアップロードできるサービスには、次のようなものがあります。

Auto Loaderのソースパスを変更する

Databricks Runtime 11.3 LTS 以降では、新しいチェックポイント ディレクトリを選択しなくても、ディレクトリ リスト モードで設定されたAuto Loaderのディレクトリ入力パスを変更できます。

警告

この機能は、ファイル通知モードではサポートされていません。 ファイル通知モードが使用されている場合、パスが変更されると、ディレクトリの更新時に新しいディレクトリに既に存在するファイルの取り込みに失敗する可能性があります。

たとえば、日ごとに整理されたディレクトリ構造 ( /YYYYMMDD/など) からすべてのデータをロードする日次インジェストジョブを実行する場合は、同じチェックポイントを使用して、以前に使用したすべてのソースディレクトリからインジェストされたファイルの状態情報を維持しながら、毎日異なるソースディレクトリのインジェスト状態情報を追跡できます。