Entfernen nicht verwendeter Datendateien mit VACUUM

Entfernen Sie Datendateien, auf die nicht mehr von einer Tabelle verwiesen wird, die älter als der Aufbewahrungsschwellenwert ist, indem Sie den VACUUM Befehl in der Tabelle ausführen. Die regelmäßige Ausführung von VACUUM ist aus Kosten- und Compliancegründen wichtig aufgrund der folgenden Überlegungen:

  • Das Löschen nicht verwendeter Datendateien reduziert die Cloudspeicherkosten.
  • Durch VACUUM entfernte Datendateien können Datensätze enthalten, die geändert oder gelöscht wurden. Durch das dauerhafte Entfernen dieser Dateien aus dem Cloudspeicher wird sichergestellt, dass auf diese Datensätze nicht mehr zugegriffen werden kann.

Die Predictive Optimization führt automatisch VACUUM in verwalteten Tabellen in Unity Catalog aus. Databricks empfiehlt die Aktivierung von prädiktiven Optimierungen für alle verwalteten Tabellen in Unity Catalog, um die Datenwartung zu vereinfachen und die Speicherkosten zu senken. Siehe Prädiktive Optimierung für verwaltete Unity Catalog-Tabellen.

Vorbehalte für Vakuum

Der Standardaufbewahrungsschwellenwert für Datendateien nach Ausführung von VACUUM beträgt 7 Tage. Informationen zum Ändern dieses Verhaltens finden Sie unter Konfigurieren der Datenaufbewahrung für Zeitreise-Abfragen.

Leere Verzeichnisse könnten nach der Entfernung aller darin enthaltenen Dateien durch VACUUM zurückbleiben. Nachfolgende VACUUM-Vorgänge löschen diese leeren Verzeichnisse.

Einige Tabellenfunktionen, wie z. B. Löschvektoren, verwenden Metadatendateien, um Daten als gelöscht zu markieren, statt Datendateien neu zu schreiben. Verwenden Sie REORG TABLE ... APPLY (PURGE), um diese Löschungen auszuführen und Datendateien neu zu schreiben. Weitere Informationen finden Sie unter Bereinigen von Nur-Metadaten-Löschvorgängen, um das Neuschreiben von Daten zu erzwingen.

Important

  • In Databricks Runtime 13.3 LTS und höher VACUUM unterscheiden sich die Semantik für flache Klonen mit verwalteten Unity-Katalog-Tabellen von anderen Tabellen. Siehe "Verwenden VACUUM mit Flachklonen im Unity-Katalog".
  • VACUUM entfernt alle Dateien aus Verzeichnissen, die nicht von Azure Databricks verwaltet werden, wobei Verzeichnisse ignoriert werden, die mit _ oder . beginnen. Wenn Sie zusätzliche Metadaten wie strukturierte Streaming Checkpoints in einem Tabellenverzeichnis speichern, verwenden Sie einen Verzeichnisnamen wie _checkpoints.
  • Die Möglichkeit, Tabellenversionen abzufragen, die älter als der Aufbewahrungszeitraum sind, geht nach der Ausführung von VACUUM verloren.
  • Protokolldateien werden nach Prüfpunktvorgängen automatisch und asynchron gelöscht und werden nicht durch VACUUM gesteuert. Während der Standardaufbewahrungszeitraum von Protokolldateien 30 Tage beträgt, werden bei der Ausführung von VACUUM bei einer Tabelle die für Zeitreisen erforderlichen Datendateien entfernt.
  • Wenn Datenträgercaching aktiviert ist, könnte ein Cluster Daten aus Parquet-Dateien enthalten, die mit VACUUM gelöscht wurden. Deshalb kann es möglich sein, die Daten früherer Tabellenversionen abzufragen, deren Dateien gelöscht wurden. Durch einen Neustart des Clusters werden die zwischengespeicherten Daten entfernt. Siehe Konfigurieren des Datenträgercaches.

Beispielsyntax für VACUUM

Um Dateien zu entfernen, die von Versionen, die älter als der Standardaufbewahrungszeitraum sind, nicht mehr benötigt werden, führen Sie VACUUM ohne zusätzliche Konfiguration aus:

VACUUM table_name

Um eine Vorschau der Liste der zu löschenden Dateien anzuzeigen, ohne sie zu entfernen, führen Sie Folgendes aus VACUUMDRY RUN:

VACUUM table_name DRY RUN

Details zur Spark SQL-Syntax finden Sie unter VACUUM.

Details zur Syntax von Scala, Java und Python finden Sie in der Dokumentation zur Delta Lake-API.

Hinweis

Verwenden Sie in Databricks Runtime 18.0 und höher die deletedFileRetentionDuration Tabelleneigenschaft, um die Aufbewahrung zu steuern. Für verwaltete Tabellen im Unity-Katalog gilt dies für Databricks Runtime 13.3 LTS und höher.

Siehe Konfigurieren der Datenaufbewahrung für Zeitreiseabfragen.

Voll- und Lite-Modus

Important

Dieses Feature befindet sich in der öffentlichen Vorschau in Databricks Runtime 16.4 LTS und höher.

Um die Leistung zu verbessern und Kosten zu senken, indem Sie nicht alle Dateien im Tabellenverzeichnis auflisten, geben Sie das LITE Schlüsselwort in Ihrer Vakuum-Anweisung an, um einen alternativen Modus von VACUUMauszulösen. Dies ist nützlich für große Tabellen, die häufige VACUUM Vorgänge erfordern.

LITE im Modus wird das Transaktionsprotokoll verwendet, um Datendateien zu identifizieren, die sich nicht mehr innerhalb des VACUUM Aufbewahrungsschwellenwerts befinden, und entfernt diese Datendateien aus der Tabelle.

Hinweis

Das Ausführen von VACUUM im LITE Modus löscht keine Dateien, auf die im Transaktionsprotokoll nicht verwiesen wird. Beispielsweise Dateien, die von einer abgebrochenen Transaktion erstellt wurden.

Verwenden Sie die folgende Syntax, um VACUUM im LITE-Modus auszuführen.

VACUUM table_name LITE

FULL der Modus ist die Standardeinstellung für Vakuum. Sie können den vollständigen Modus explizit mit dem folgenden Befehl ausführen:

VACUUM table_name FULL

Siehe VACUUM.

Requirements

LITE der Modus hat die folgende Anforderung:

  • Sie müssen mindestens einen erfolgreichen VACUUM Vorgang innerhalb des konfigurierten Aufbewahrungsschwellenwerts für Transaktionsprotokolle (standardmäßig 30 Tage) ausgeführt haben.

Wenn diese Anforderung nicht erfüllt ist, wird beim Ausführen VACUUM im LITE Modus die folgende Fehlermeldung angezeigt. Um fortzufahren, müssen Sie VACUUM im FULL-Modus ausführen.

VACUUM <tableName> LITE cannot delete all eligible files as some files are not referenced by the log. Please run VACUUM FULL.

Metadaten-nur-Löschungen durchführen, um das Neuschreiben von Daten zu erzwingen

Mit dem Befehl REORG TABLE und der Syntax APPLY (PURGE) können Sie Daten neu schreiben, um weiche Löschungen anzuwenden. Vorläufige Löschvorgänge schreiben keine Daten neu oder löschen keine Datendateien, sondern verwenden Metadatendateien, um anzugeben, dass sich einige Datenwerte geändert haben. Siehe REORG TABLE.

Vorgänge zum Erstellen von vorläufigen Löschungen umfassen Folgendes:

  • Entfernen von Spalten mit aktivierter Spaltenzuordnung.
  • Alle Datenänderungen mit aktivierten Löschvektoren.

Bei aktivierten Vorläufiglöschungen bleiben alte Daten möglicherweise physisch in den aktuellen Dateien der Tabelle vorhanden, auch nachdem die Daten gelöscht oder aktualisiert wurden. Führen Sie die folgenden Schritte aus, um diese Daten physisch aus der Tabelle zu entfernen:

  1. Führen Sie REORG TABLE ... APPLY (PURGE) aus. Danach sind die alten Daten nicht mehr in den aktuellen Dateien der Tabelle vorhanden, sind aber weiterhin in den älteren Dateien vorhanden, die für Zeitreisen verwendet werden.
  2. Führen Sie VACUUM aus, um diese älteren Dateien zu löschen.

REORG TABLE erstellt nach Abschluss des Vorgangs eine neue Version der Tabelle. Alle Tabellenversionen im Verlauf vor dieser Transaktion beziehen sich auf ältere Datendateien. Konzeptionell ähnelt dies dem OPTIMIZE-Befehl, bei dem Datendateien neu geschrieben werden, obwohl die Daten in der aktuellen Tabellenversion konsistent bleiben.

Important

Datendateien werden nur gelöscht, wenn die Dateien gemäß dem abgelaufen sind VACUUM-Aufbewahrungszeitraum. Dies bedeutet, dass VACUUM mit einer Verzögerung nach dem REORG erfolgen muss, um sicherzustellen, dass die älteren Dateien abgelaufen sind. Der Aufbewahrungszeitraum von VACUUM kann reduziert werden, um die erforderliche Wartezeit zu verkürzen, was jedoch mit einer Verkürzung des maximalen aufbewahrten Zeitreiseverlaufs einhergeht.

Empfehlungen für Clustergrößen für Vakuum

Um die richtige Clustergröße auszuwählen VACUUM, berücksichtigen Sie, dass der Vorgang in zwei Phasen erfolgt:

  1. Die Aufgabe beginnt mit der Verwendung aller verfügbaren Executorknoten zum parallelen Auflisten der Dateien im Quellverzeichnis. Der Job vergleicht diese Liste mit allen Dateien, die derzeit im Transaktionsprotokoll referenziert sind, um die zu löschenden Dateien zu identifizieren. Der Treiber befindet sich in dieser Zeit im Leerlauf.
  2. Der Treiber gibt Löschbefehle für jede datei aus, die zum Löschen identifiziert wurde. Da das Löschen von Dateien ein Vorgang ist, der nur auf dem Treiberknoten ausgeführt wird, werden alle Vorgänge auf einem einzigen Knoten ausgeführt, während die Worker-Knoten im Leerlauf bleiben.

Um Kosten und Leistung zu optimieren, empfiehlt Databricks Folgendes, insbesondere bei zeitintensiven VACUUM-Aufträgen:

  • Führen Sie VACUUM auf einem Cluster aus, für den die automatische Skalierung für 1 bis 4 Worker festgelegt ist und jeder Worker über 8 Kerne verfügt.
  • Wählen Sie einen Treiber mit 8 bis 32 Kernen aus. Erhöhen Sie die Größe des Treibers, um OOM-Fehler (Out-of-Memory-Fehler) zu vermeiden.

Wenn VACUUM-Vorgänge regelmäßig mehr als 10 000 Dateien löschen oder mehr als 30 Minuten Verarbeitungszeit in Anspruch nehmen, sollten Sie entweder die Größe des Treibers oder die Anzahl der Worker erhöhen.

Wenn Sie feststellen, dass die Verlangsamung während dem Identifizieren der zu entfernenden Dateien auftritt, fügen Sie weitere Workerknoten hinzu. Wenn die Verlangsamung auftritt, während Löschbefehle ausgeführt werden, versuchen Sie, die Größe des Treibers zu erhöhen.

Databricks empfiehlt, VACUUM regelmäßig für alle Tabellen auszuführen, um die Kosten für Clouddatenspeicher zu reduzieren. Der Standardaufbewahrungszeitraum für das Vacuum beträgt 7 Tage. Wenn Sie einen höheren Schwellenwert festlegen, erhalten Sie Zugriff auf einen größeren Verlauf für Ihre Tabelle, erhöht aber die Anzahl der gespeicherten Datendateien und erhöht dadurch die Speicherkosten ihres Cloudanbieters.

Vakuum- und niedrige Aufbewahrungsschwellenwerte

Warnung

Databricks empfiehlt dringend, ein Aufbewahrungsintervall von mindestens 7 Tagen festzulegen. Wenn Sie Aufträge haben, die mehrere Tage laufen, können lang andauernde Aufträge Dateien schreiben, die noch nicht finalisiert sind. Wenn Der Aufbewahrungszeitraum zu kurz ist, könnten diese nicht gesendeten Dateien gelöscht werden, VACUUM bevor der Auftrag abgeschlossen ist.

Es gibt eine Sicherheitsüberprüfung, um zu verhindern, dass Sie einen gefährlichen VACUUM Befehl ausführen. Wenn Sie sicher sind, dass in dieser Tabelle keine Vorgänge ausgeführt werden, die länger als das aufbewahrungsintervall dauern, das Sie angeben möchten, deaktivieren Sie diese Sicherheitsüberprüfung, indem Sie die retentionDurationCheck Spark-Konfiguration auf falsefolgendes festlegen:

Delta

SET spark.databricks.delta.retentionDurationCheck.enabled = false

Iceberg

SET spark.databricks.iceberg.retentionDurationCheck.enabled = false

Überwachungsinformationen

VACUUM protokolliert Audit-Informationen im Transaktionsprotokoll. Abfragen der Überwachungsereignisse mithilfe von DESCRIBE HISTORY.

Standardmäßig ist die Überwachungsprotokollierung auf allen Plattformen für verwaltete Tabellen im Unity-Katalog aktiviert. Steuern der Vakuumüberwachungsprotokollierung mit der vacuum.logging Spark-Konfiguration:

Delta

SET spark.databricks.delta.vacuum.logging.enabled = true

Iceberg

SET spark.databricks.iceberg.vacuum.logging.enabled = true

Um diese Konfiguration für einen gesamten Arbeitsbereich auf alle Cluster anzuwenden, verwenden Sie eine Clusterrichtlinie, und fügen Sie der Richtlinien-JSON Folgendes hinzu:

Delta

{
  "spark_conf.spark.databricks.delta.vacuum.logging.enabled": {
    "type": "fixed",
    "value": "true"
  }
}

Iceberg

{
  "spark_conf.spark.databricks.iceberg.vacuum.logging.enabled": {
    "type": "fixed",
    "value": "true"
  }
}

Siehe Erstellen und Verwalten von Berechnungsrichtlinien.

Hinweis

Die Überwachungsprotokollierung ist auch standardmäßig für externe Tabellen aktiviert.