用自動載入器清理已處理的檔案

Note

cloudFiles.cleanSource 可在 Databricks Runtime 16.4 及以上版本中取得。

在處理完檔案後,用 cloudFiles.cleanSource 來移動或刪除來源目錄中的檔案。 移除已處理的檔案可降低儲存成本,並縮短未來登錄作業的持續時間。

Mode Description
OFF (預設值) 來源目錄中的檔案不會被移動或刪除。
MOVE 來源目錄中的檔案會在保留期限(預設 30 天)以經過時間(elapses)定義cloudFiles.cleanSource.retentionDuration後,移動到指定的cloudFiles.cleanSource.moveDestination路徑。
DELETE 來源目錄中的檔案會在保留期限(預設 30 天)以經過時間定義 cloudFiles.cleanSource.retentionDuration 後刪除。
附加選項 預設值 有效數值 Description
cloudFiles.cleanSource.retentionDuration 30 days 一個像 、 14 days、 或 這樣的 2 weeks 字串1 month 處理後的檔案在清理乾淨來源後,等待的時間長短。 必須大於 7 天對於 DELETE。 沒有最低限制 MOVE.
cloudFiles.cleanSource.waitForCompletion false true、false 此選項可在 Databricks Runtime 19 及以上版本中使用。
乾淨來源預設是盡力而為的操作。 如果串流在乾淨原始碼移動或刪除檔案完成前完成處理檔案,清潔原始碼操作就會終止。 設定會 cloudFiles.cleanSource.waitForCompletion 強制串流保持存活,直到乾淨的原始碼完成移動或刪除檔案。 如果有大量檔案需要刪除,這會增加串流的執行時間。
這只適用於串流自行完成(例如 availableNow 觸發資料會耗盡所有檔案)時。 手動停止或取消串流會立即終止乾淨源操作,即使此選項已設定。
cloudFiles.cleanSource.moveDestination None 雲端儲存或 Unity 目錄磁碟區路徑 當 cloudFiles.cleanSource 設定為 MOVE 時,歸檔已處理檔案的路徑。 這可以是雲端儲存路徑或 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 就能被清理。 為了降低成本,自動載入器會與串流處理同時清理檔案,並在串流處理完成或終止後立即終止。 原本可清理但無法在串流處理中清理的檔案,會在下一次自動載入器執行時被選取。

關於清潔源的備註

  • 乾淨原始碼只有在有一批檔案需要處理時才會執行。 它不是一個獨立於攝取過程的背景過程。 如果來源目錄中沒有新的檔案可匯入,當前串流的乾淨原始碼不會開始。 因此,如果串流停止接收新檔案,已經超過保留期限的檔案不會被清理,直到後續串流執行新批次處理時才會被清理。

    此批次要求不論 。cloudFiles.cleanSource.waitForCompletion 這個選項只會讓溪流持續到完成正在進行的清理工作。 當沒有批次要處理時,它不會啟動乾淨的來源。

  • 若檔案在第 N 次串流時被導入,則 commit_time 該檔案的 在 N+1 次串流執行時會被設定為該檔案。 commit_time 必須先設定,才能讓乾淨原始碼判斷檔案是否符合移動或刪除的資格,因此檔案最早成為清理候選者是 N+2 次串流執行。

  • 設定 commit_time 是必要的,但不夠。 檔案只有在其保留時間(以 commit_time為基準)過後才會被清理。 例如,預設 cloudFiles.cleanSource.retentionDuration 為 30 天,今天處理的檔案要設定後 commit_time 30 天才有資格清理。 無論中間有多少次溪流,這個規則都成立。 這兩個條件都必須符合,檔案才會被移動或刪除。