Auto Loaderで処理済みファイルのクリーンアップ

cloudFiles.cleanSource Databricks Runtime 16.4以降で利用可能です。

処理後のファイルをソースディレクトリから移動または削除するために cloudFiles.cleanSource を使います。 処理済みファイルを削除することでストレージコストが削減され、将来のリスティング作業の期間も短縮されます。

Mode Description
OFF (既定値) ソースディレクトリ内のファイルは移動も削除もされません。
MOVE ソースディレクトリ内のファイルは、cloudFiles.cleanSource.retentionDuration経過によって定められた保持期間(デフォルトの30日)後にcloudFiles.cleanSource.moveDestinationが指定したパスに移動します。
DELETE ソースディレクトリ内のファイルは、 cloudFiles.cleanSource.retentionDuration 経過期間(デフォルトの30日)終了後に削除されます。
追加オプション Default 有効な値 Description
cloudFiles.cleanSource.retentionDuration 30 days calendarInterval 文字列 (14 days2 weeks、または1 month 処理済みファイルがクリーンソースでクリーンアップの候補になるまでの待ち時間。 DELETEの場合は 7 日を超える必要があります。 MOVEの最小制限はありません。
cloudFiles.cleanSource.waitForCompletion false truefalse このオプションはDatabricks Runtime 19以降で利用可能です。
クリーンソースはデフォルトでベストエフォートの操作です。 ストリームがクリーンソースの移動や削除を完了する前にファイルの処理を完了した場合、クリーンソース操作は終了します。 cloudFiles.cleanSource.waitForCompletion設定すると、クリーンソースがファイルの移動や削除を終えるまでストリームが生き続けます。 ファイル数が多いとストリームの実行時間が長くなることがあります。
これはストリームが自動的に完了した場合にのみ適用されます(例えば、すべてのファイルをドレインする availableNow トリガーの場合)。 ストリームを手動で停止またはキャンセルすると、クリーンソース操作は即座に終了します。このオプションが設定されていてもです。
cloudFiles.cleanSource.moveDestination None クラウド ストレージまたは Unity カタログのボリューム パス cloudFiles.cleanSourceMOVEに設定されている場合に処理されたファイルをアーカイブするパス。 クラウド ストレージ パスまたは Unity カタログ ボリューム パス ( /Volumes/my_catalog/my_schema/my_volume/archive/ など) を指定できます。
移動場所は次の条件を満たす必要があります。
  • ソース ディレクトリの子ではありません。 移動先をソース ディレクトリ内に配置すると、アーカイブされたファイルが再び取り込まれます。
  • ソースと同じ外部の場所、ボリューム、または DBFS マウント内にある。 クロスバケットとクロスコンテナーの移動はサポートされていないため、エラーが発生します。

自動ローダーには、このディレクトリへの書き込みアクセス許可が必要です。

有効化前の考慮事項 cloudFiles.cleanSource

  • Azure Databricksは、複数のストリームが同じソースディレクトリからデータを消費する場合、このオプションの使用を推奨していません。 最も速いストリームがファイルをクリーンアップするため、遅いストリームは取り込みません。
  • この機能を有効にするには、自動ローダーがそのチェックポイントで追加の状態を維持する必要があります。これにより、パフォーマンスのオーバーヘッドが発生しますが、テーブル値関数 cloud_files_state による可観測性が向上します。 テーブル値関数cloud_files_state参照してください。
  • クリーンソースは現在の設定を使って、あるファイルを MOVEDELETE するかを判断します。 たとえば、ファイルが最初に処理されたときに設定が MOVE されたが、30 日後にファイルがクリーンアップの候補になったときに DELETE に変更されたとします。 この場合、クリーンソースはファイルを削除します。
  • ファイルは、 cloudFiles.cleanSource.retentionDuration の有効期限が切れるとすぐに消去される保証はありません。 コストを抑えるため、オートローダーはストリーム処理と同時にファイルをクリーンアップし、ストリーム処理が完了または終了するとすぐに終了します。 クリーンアップの候補だったものの、ストリーム処理中にクリーンアップできなかったファイルは、次回Auto Loader実行時に取り出されます。

クリーンソースに関する注記

  • クリーンソースは処理すべきファイルのバッチがある場合のみ実行されます。 これは摂取とは独立して進行するバックグラウンドプロセスではありません。 ソースディレクトリに取り込む新しいファイルがなければ、現在のストリーム実行でクリーンソースが開始されません。 その結果、ストリームが新しいファイルの受信を停止した場合、すでに保持期間を過ぎたファイルは、後のストリームが新しいバッチを処理するまでクリーンアップされません。

    このバッチ要件は、 cloudFiles.cleanSource.waitForCompletionに関係なく適用されます。 このオプションは、進行中のクリーンアップを1回のランで終わらせるまでストリームを維持できるだけです。 バッチがなければクリーンソースから起動しません。

  • N回目のストリーム実行でファイルが取り込まれた場合、そのファイルの commit_time はN+1回のストリーム実行で設定されます。 commit_time クリーンソースがファイルが移動または削除の対象かどうかを判断する前に設定しなければならず、ファイルがクリーンアップの候補となる最も早いタイミングはN+2回のストリーム実行です。

  • commit_time設定は必要ですが、十分ではありません。 ファイルは保存期間が経過した後にのみ、その commit_timeから測定されます。 例えば、デフォルトの30日の cloudFiles.cleanSource.retentionDuration では、今日処理されたファイルは commit_time 設定から30日後までクリーンアップの対象になりません。 これは、間に何回の流れが起ころうとも成り立ちます。 ファイルを移動または削除する前に、両方の条件を満たす必要があります。