メインコンテンツまでスキップ

ディレクトリリストモードのAuto Loaderストリーム

このページでは、ディレクトリ Auto Loader リストモードを使用してクラウドデータを段階的に検出して取り込むようにストリームを設定する方法について説明します。

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

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

注記

Databricks では、ほとんどのワークロードでディレクトリ一覧モードではなく、外部ロケーションのファイル イベントを使用するファイル通知モードをお勧めします。 現在、ディレクトリ一覧モードで Auto Loader を使用している場合は、 Databricks では、ファイル イベントを使用してファイル通知モードに移行して、パフォーマンスの大幅な向上を確認することをお勧めします。 ファイル通知モードでのAuto Loaderストリームの構成を参照してください。

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

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の

1024

GCSの

増分リスト(非推奨)

important

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

注記

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

増分リストは、 Azure データレイク Storage (abfss://)、 S3 (s3://)、 GCS (gs://) で使用できます。

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

cloudFiles.useIncrementalListingautoに設定すると、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/など) からすべてのデータをロードする日次インジェストジョブを実行する場合は、同じチェックポイントを使用して、以前に使用したすべてのソースディレクトリからインジェストされたファイルの状態情報を維持しながら、毎日異なるソースディレクトリのインジェスト状態情報を追跡できます。