Beseitigen Sie verarbeitete Dateien mit Auto Loader

Hinweis

cloudFiles.cleanSource ist ab Databricks Runtime 16.4 verfügbar.

Verwenden cloudFiles.cleanSource Sie, um Dateien aus dem Quellverzeichnis zu verschieben oder zu löschen, nachdem sie verarbeitet wurden. Das Entfernen bearbeiteter Dateien senkt die Speicherkosten und verkürzt die Dauer zukünftiger Listing-Operationen.

Modus Description
OFF (Standardwert) Die Dateien im Quellverzeichnis werden nicht verschoben oder gelöscht.
MOVE Die Dateien im Quellverzeichnis werden auf den von definierten Pfad nach der durch Ablauf definierten Speicherdauer (standardmäßig 30 Tage) verschoben cloudFiles.cleanSource.moveDestinationcloudFiles.cleanSource.retentionDuration .
DELETE Die Dateien im Quellverzeichnis werden nach der durch cloudFiles.cleanSource.retentionDuration Ablauf definierten Aufbewahrungsdauer (standardmäßig 30 Tage) gelöscht.
Zusätzliche Option Vorgabe Gültige Werte Description
cloudFiles.cleanSource.retentionDuration 30 days Eine CalendarInterval-Zeichenfolge wie 14 days, oder 2 weeks1 month Zeit, die man warten muss, bevor bearbeitete Dateien mit sauberer Quelle als Kandidaten für eine Bereinigung geeignet sind. Für DELETE muss es größer als 7 Tage sein. Keine Mindesteinschränkung für MOVE.
cloudFiles.cleanSource.waitForCompletion false true, false Diese Option ist in Databricks Runtime 19 und höher verfügbar.
Clean Source ist standardmäßig eine Best-Effort-Operation. Wenn der Strom die Dateien fertig verarbeitet, bevor die Clean Source fertig ist, Dateien zu verschieben oder zu löschen, wird die Clean-Source-Operation beendet. Die Einstellung cloudFiles.cleanSource.waitForCompletion zwingt den Stream, lebendig zu bleiben, bis die Clean Source Dateien verschoben oder gelöscht hat. Das kann die Laufzeit des Streams verlängern, wenn viele Dateien gelöscht werden müssen.
Dies gilt nur, wenn der Stream von selbst abgeschlossen wird (zum Beispiel ein availableNow Trigger, der alle Dateien entleert). Das manuelle Stoppen oder Abbrechen des Stroms beendet die Reinigung der Quellfunktion sofort, selbst wenn diese Option aktiviert ist.
cloudFiles.cleanSource.moveDestination Nichts Ein Cloudspeicher- oder Unity-Katalog-Volumepfad Pfad zum Archivieren verarbeiteter Dateien, wenn cloudFiles.cleanSource auf MOVE gesetzt wird. Dies kann ein Cloudspeicherpfad oder ein Unity Catalog-Volumepfad sein (z. B /Volumes/my_catalog/my_schema/my_volume/archive/. ).
Der Speicherort muss:
  • Kein untergeordnetes Element des Quellverzeichnisses. Wenn Sie das Verschiebungsziel im Quellverzeichnis platzieren, werden die archivierten Dateien erneut aufgenommen.
  • Befinden Sie sich an demselben externen Speicherort, Volume oder DBFS-Mount wie die Quelle. Cross-Bucket- und Cross-Container-Verschiebungen werden nicht unterstützt und erzeugen einen Fehler.

Auto Loader muss Schreibberechtigungen für dieses Verzeichnis besitzen.

Überlegungen vor der Ermöglichung cloudFiles.cleanSource

  • Azure Databricks empfiehlt nicht, diese Option zu verwenden, wenn mehrere Streams Daten aus demselben Quellverzeichnis verbrauchen. Der schnellste Stream bereinigt die Dateien, sodass die langsameren Streams sie nie einnehmen.
  • Zum Aktivieren dieses Features ist das automatische Laden erforderlich, um zusätzlichen Zustand im Prüfpunkt beizubehalten, was zu Leistungsaufwand kommt, aber eine verbesserte Observierbarkeit über die cloud_files_state Tabellenwertfunktion ermöglicht. Siehe cloud_files_state Tabellenwertfunktion.
  • Clean Source verwendet die aktuelle Einstellung, um zu entscheiden, ob sie oder DELETE eine bestimmte Datei sein sollMOVE. Angenommen, die Einstellung war MOVE, als die Datei ursprünglich verarbeitet wurde, wurde aber in DELETE geändert, als die Datei 30 Tage später zum Kandidaten für die Bereinigung wurde. In diesem Fall löscht der Clean Source die Datei.
  • Dateien werden nicht garantiert bereinigt, sobald die cloudFiles.cleanSource.retentionDuration Dateien ablaufen. Um die Kosten niedrig zu halten, bereinigt Auto Loader Dateien gleichzeitig mit der Stream-Verarbeitung und beendet die Dateien, sobald die Stream-Verarbeitung abgeschlossen oder beendet wird. Dateien, die für die Bereinigung geeignet waren, aber während der Stream-Verarbeitung nicht gelöscht werden konnten, werden beim nächsten Start von Auto Loader aufgerufen.

Anmerkungen zur sauberen Quelle

  • Clean Source läuft nur, wenn eine Charge von Dateien verarbeitet werden muss. Es handelt sich nicht um einen Hintergrundprozess, der unabhängig von der Aufnahme abläuft. Wenn keine neuen Dateien im Quellverzeichnis eingetragen werden müssen, startet der Clean Source nicht für den aktuellen Stream-Lauf. Wenn ein Strom keine neuen Dateien mehr erhält, werden Dateien, die ihre Aufbewahrungsdauer bereits überschritten haben, erst beseitigt, wenn ein späterer Stream einen neuen Batch verarbeitet.

    Diese Chargenanforderung gilt unabhängig von cloudFiles.cleanSource.waitForCompletion. Diese Option hält den Stream nur lange genug am Leben, um eine laufende Aufräumaktion innerhalb eines Durchlaufs abzuschließen. Es startet keine Clean Source, wenn kein Batch zur Verarbeitung vorhanden ist.

  • Wenn eine Datei beim N-ten Stream-Run aufgenommen wird, wird der commit_time für die Datei auf dem N+1-Stream-Run gesetzt. commit_time muss gesetzt werden, bevor Clean Source bestimmen kann, ob eine Datei für Verschieben oder Löschen geeignet ist, daher kann eine Datei frühestens als Kandidat für die Bereinigung gelten der N+2-Stream-Durchlauf sein.

  • Setting commit_time ist notwendig, aber nicht ausreichend. Eine Datei wird erst gereinigt, wenn ihre Aufbewahrungsdauer abgelaufen ist, gemessen aus ihrer commit_time. Zum Beispiel ist eine heute bearbeitete Datei mit dem Standard cloudFiles.cleanSource.retentionDuration von 30 Tagen erst 30 Tage nach ihrer commit_time Einstellung zur Bereinigung berechtigt. Dies gilt unabhängig davon, wie viele Bachläufe dazwischen stattfinden. Beide Bedingungen müssen erfüllt sein, bevor die Datei verschoben oder gelöscht wird.