Auto Loader で処理済みファイルをクリーンアップする
cloudFiles.cleanSource は Databricks Runtime 16.4 以降で利用可能です。
cloudFiles.cleanSource を使用して、処理後のファイルをソースディレクトリから移動または削除します。処理済みのファイルを削除することで、ストレージコストが削減され、将来のリスト操作にかかる時間が短縮されます。
モード | 説明 |
|---|---|
| ソースディレクトリ内のファイルは移動または削除されません。 |
| ソースディレクトリ内のファイルは、 |
| ソースディレクトリ内のファイルは、 |
追加オプション | デフォルト | 有効な値 | 説明 |
|---|---|---|---|
|
|
| 処理済みのファイルがクリーンソースによるクリーンアップの対象となるまでに待機する時間。 |
|
|
| このオプションは、Databricks Runtime 19以降で利用可能です。 クリーンソースは、デフォルトでベストエフォート型の操作です。クリーンソースによるファイルの移動または削除が完了する前にストリームがファイルの処理を完了した場合、クリーンソース操作は終了します。 これは、ストリームが単独で完了する場合(たとえば、すべてのファイルをドレインする |
| なし | クラウドストレージまたは Unity Catalog ボリュームのパス |
移動先は次の条件を満たす必要があります:
Auto Loader には、このディレクトリに対する書き込み権限が必要です。 |
有効にする前の考慮事項 cloudFiles.cleanSource
- 複数のストリームが同じソースディレクトリからデータを消費する場合、Databricks ではこのオプションの使用を推奨していません。最も高速なストリームがファイルをクリーンアップするため、低速なストリームがそれらを取り込むことはありません。
- この機能を有効にするには、Auto Loaderがチェックポイントに追加の状態を保持する必要があります。これによりパフォーマンスのオーバーヘッドが発生しますが、
cloud_files_stateテーブル値関数を通じて可観測性が向上します。「cloud_files_stateテーブル値関数」を参照してください。 - クリーンソースは現在の設定を使用して、特定のファイルを
MOVEするかDELETEするかを決定します。たとえば、ファイルが最初に処理されたときの設定がMOVEであったが、30日後にクリーンアップの対象となったときにDELETEに変更されたとします。この場合、クリーンソースはファイルを削除します。 cloudFiles.cleanSource.retentionDurationの有効期限が切れてすぐにファイルがクリーンアップされるとは限りません。コストを低く抑えるため、Auto Loaderはストリーム処理と並行してファイルをクリーンアップし、ストリーム処理が完了または終了するとすぐに終了します。クリーンアップの対象であったものの、ストリーム処理中にクリーンアップできなかったファイルは、次回のAuto Loaderの実行時に処理されます。
clean ソースに関する注意事項
-
clean ソース は、処理対象のファイルのバッチがある場合にのみ実行されます。これは、取り込みとは独立して実行されるバックグラウンドプロセスではありません。ソースディレクトリに取り込む新しいファイルがない場合、現在のストリームランでは clean source は開始されません。その結果、ストリームが新しいファイルの受信を停止した場合、保持期間を過ぎたファイルは、後のストリームランで新しいバッチが処理されるまでクリーンアップされません。
このバッチ要件は、
cloudFiles.cleanSource.waitForCompletionに関係なく適用されます。そのオプションは、ラン内の進行中のクリーンアップを完了させるために必要な時間だけストリームを維持します。処理するバッチがない場合、クリーンなソースは起動しません。 -
ファイルが N 回目のストリームランで取り込まれた場合、そのファイルの
commit_timeは N+1 回目のストリームランで設定されます。clean ソース がファイルが移動または削除の対象となるかどうかを判断するにはcommit_timeを設定する必要があるため、ファイルがクリーンアップの候補となるのは最短で N+2 回目のストリーム ラン となります。 -
commit_timeの設定は必要ですが、十分ではありません。ファイルは、commit_timeから測定された保持期間が経過した後にのみクリーンアップされます。たとえば、defaultのcloudFiles.cleanSource.retentionDurationが30日の場合、今日処理されたファイルは、そのcommit_timeが設定されてから30日が経過するまでクリーンアップの対象になりません。これは、その間にいくつのストリームランが発生したかに関係なく適用されます。ファイルが移動または削除される前に、両方の条件が満たされている必要があります。