Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Mit dem OPTIMIZE Befehl werden Datendateien neu geschrieben, um das Datenlayout für Delta Lake- und Apache Iceberg-Tabellen zu verbessern. Bei Tabellen, für die Liquid Clustering aktiviert ist, schreibt OPTIMIZE die Datendateien neu, um die Daten nach Liquid Clustering-Schlüsseln zu gruppieren. Bei Tabellen mit definierten Partitionen werden die Dateikomprimierung und das Datenlayout innerhalb der Partitionen durchgeführt.
Die Predictive Optimization führt automatisch OPTIMIZE in verwalteten Tabellen in Unity Catalog aus. Databricks empfiehlt die Aktivierung der prädiktiven Optimierung 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.
Delta Lake-Tabellen ohne Liquid Clustering können optional eine ZORDER BY-Klausel enthalten, um die Datenclusterung beim Umschreiben zu verbessern. Apache Iceberg-Tabellen verwenden Clustering- und Sortierstrategien anstelle von ZORDER. Databricks empfiehlt die Verwendung von Liquid Clustering anstelle von Partitionen, ZORDER oder anderen Datenlayoutansätzen.
Siehe OPTIMIZE.
Important
In Databricks Runtime 16.0 und höher können Sie OPTIMIZE FULL verwenden, um das Neuclustering für Tabellen mit aktivierter Flüssigclusterung zu erzwingen. Siehe "Neuclustering erzwingen".
Syntaxbeispiele
Lösen Sie die Komprimierung aus, indem Sie den OPTIMIZE Befehl ausführen:
SQL
OPTIMIZE table_name
Python
Die Python DeltaTable-API ist Delta Lake-spezifisch.
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()
Scala
Die Scala DeltaTable-API ist Delta Lake-spezifisch.
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()
Wenn Sie über eine große Datenmenge verfügen und nur eine Teilmenge optimieren möchten, geben Sie ein optionales Partitions-Prädikat mit WHERE:
SQL
OPTIMIZE table_name WHERE date >= '2022-11-18'
Python
Die Python DeltaTable-API ist Delta Lake-spezifisch.
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
Scala
Die Scala DeltaTable-API ist Delta Lake-spezifisch.
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
Berücksichtigen Sie die folgenden Informationen zum Bin-Packing:
- Die Bin-Packing-Optimierung ist idempotent. Dies bedeutet, dass bei einer zweimaligen Ausführung für dasselbe Dataset der zweite Durchlauf keine Auswirkungen hat.
- Bin-packing zielt darauf ab, gleichmäßig ausgeglichene Datendateien in Bezug auf ihre Größe im Speicher zu produzieren, aber nicht unbedingt durch die Anzahl der Tupel pro Datei. Die beiden Maßnahmen sind jedoch häufig korreliert.
Für Leser von Delta-Lake-Tabellen gilt Snapshot-Isolation, was bedeutet, dass sie nicht unterbrochen werden, wenn OPTIMIZE unnötige Dateien aus dem Transaktionsprotokoll entfernt. Da OPTIMIZE keine Daten in der Tabelle ändert, liefert ein Lesen vor und nach einem OPTIMIZE dieselben Ergebnisse. Die Ausführung OPTIMIZE einer Tabelle, die eine Streamingquelle ist, wirkt sich nicht auf aktuelle oder zukünftige Datenströme mit dieser Tabelle als Quelle aus.
OPTIMIZE gibt Dateistatistiken (Mindestwert, Höchstwert, Gesamtwert usw.) für die durch den Vorgang entfernten und hinzugefügten Dateien zurück. Die Optimierungsstatistiken enthalten auch Statistiken zur Z-Reihenfolge, die Anzahl von Stapeln und die optimierten Partitionen.
Sie können auch kleine Dateien mithilfe der automatischen Verdichtung automatisch verdichten. Siehe Automatische Komprimierung.
Empfohlene Ausführungshäufigkeit OPTIMIZE
Aktivieren Sie die Predictive Optimization für verwaltete Unity Catalog-Tabellen, um sicherzustellen, dass OPTIMIZE automatisch ausgeführt wird, wenn es kostengünstig ist.
Wenn Sie die Häufigkeit auswählen, mit der OPTIMIZE ausgeführt wird, gibt es eine Abwägung zwischen Leistung und Kosten. Führen Sie OPTIMIZE häufiger aus, um die Leistung von Endbenutzerabfragen zu verbessern. Dies verursacht aufgrund der erhöhten Ressourcennutzung höhere Kosten. Um Kosten zu optimieren, führen Sie es seltener aus.
Databricks empfiehlt, OPTIMIZE zunächst täglich auszuführen und dann die Häufigkeit anzupassen, um ein ausgewogenes Verhältnis zwischen Kosten und Leistung zu erzielen.
Empfohlene Instanztypen für OPTIMIZE
Beide Vorgänge sind CPU-intensive Vorgänge, die große Mengen an Parquet-Decodierung und -Codierung erfordern.
Databricks empfiehlt Instanzen vom Typ Für Compute optimiert.
OPTIMIZE profitiert auch von angefügten SSDs.