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.
Gilt für:
Databricks SQL
Databricks Runtime
Diese Seite beschreibt den OPTIMIZE Befehl, der das Layout von Delta Lake-Daten optimiert. Sie können eine Teilmenge von Daten optimieren oder Daten nach Spalte verknüpfen. Wenn Sie keine Kollokation angeben und die Tabelle keine flüssigen Clustering verwendet, führt Delta Lake eine Optimierung der Behälterverpackung durch.
Syntax
OPTIMIZE table_name [FULL] [WHERE predicate]
[ZORDER BY (col_name1 [, ...] ) ]
Hinweis
Die Optimierung der Behälterverpackung ist idempotent: Wenn Sie sie zweimal auf demselben Datensatz ausführen, hat die zweite Ausführung keine Auswirkung. Es erzeugt gleichmäßig ausgeglichene Datendateien in Bezug auf ihre Größe auf dem Datenträger, aber nicht unbedingt die Anzahl der Tupel pro Datei. Die beiden Kennzahlen sind am häufigsten korreliert.
Z-Order ist nicht idempotent, sondern wird inkrementell betrieben. Die Zeit, in der Z-Sortierung dauert, ist nicht garantiert, dass sie sich über mehrere Laufläufe verringert. Wenn jedoch keine neuen Daten zu einer Partition hinzugefügt wurden, die nur Z-Ordered war, hat die Ausführung der Z-Sortierung auf dieser Partition keine Auswirkung. Z-Order erzeugt gleichmäßig ausgeglichene Datendateien in Bezug auf die Anzahl der Tupel, aber nicht unbedingt die Datengröße auf dem Datenträger. Die beiden Measures sind am häufigsten korreliert, aber beim Optimieren von Vorgangszeiten kann schief auftreten, wenn sie voneinander abweichen.
Hinweis
Wenn Sie Databricks Runtime verwenden, legen Sie die Spark-Konfigurationspark.databricks.delta.optimize.maxFileSize fest, um die Ausgabedateigröße zu steuern. Der Standardwert ist 1073741824 (1 GB). Die Angabe 104857600 legt die Dateigröße auf 100 MB fest.
Parameter
-
Identifiziert eine vorhandene Delta-Tabelle. Der Name darf keine zeitliche Spezifikation oder Optionsspezifikation enthalten.
FULLGilt für:
Databricks Runtime 16.0 und höherSchreibt alle Datendateien in der Tabelle neu. Verwendung:
OPTIMIZE table_name FULL- Optimieren Sie die gesamte Tabelle, einschließlich der Daten, die zuvor gruppiert wurden (für Tabellen mit flüssigem Clustering).
- Erneut komprimieren Sie vorhandene Datendateien, wenn Sie den Komprimierungs-Codec der Tabelle über die Eigenschaft
delta.parquet.compression.codecändern.
Um vorhandene Daten nach dem Ändern des Komprimierungscodecs erneut zu komprimieren, führen Sie Folgendes aus
OPTIMIZE table_name FULL:-- Change compression codec ALTER TABLE table_name SET TBLPROPERTIES ('delta.parquet.compression.codec' = 'ZSTD'); -- Recompress all existing data files OPTIMIZE table_name FULL;Um eine Teilmenge von Dateien in einer Tabelle mit aktivierter Liquid Clustering zu optimieren, kombinieren Sie
FULLes mit einemWHEREPrädikat (Databricks Runtime 18.1 und höher). Nur einfache Bereichs-Prädikate für eine einzelne Clusterspalte werden unterstützt. Eine Datei wird eingeschlossen, wenn ein Teil seines Bereichs mit dem Prädikat überlappt. Enthält z. B. eine Datei mit Bereich(col_min = 10, col_max = 20),OPTIMIZE events FULL WHERE date > 15da sich der Bereich der Datei mit dem Prädikat überlappt.WHEREOptimiert die Teilmenge der Zeilen, die einem Partitions-/Clustering-Prädikat entsprechen. Es werden nur Filter für Partitions-/Clusteringschlüsselattribute unterstützt.
Verwenden Sie für Tabellen, die liquide Clustering verwenden
OPTIMIZE table_name FULL WHERE predicate(Databricks Runtime 18.1 und höher) stattdessen.ZORDER BYSortiert Spalteninformationen in derselben Gruppe von Dateien. Delta Lake-Datenspringungsalgorithmen verwenden co-lokalität, um die Menge der zu lesenden Daten zu reduzieren. Sie können mehrere Spalten als durch Trennzeichen getrennte Liste angeben, aber die Wirksamkeit der Kolokalität nimmt bei jeder zusätzlichen Spalte ab.
Sie können diese Klausel nicht für Tabellen verwenden, die flüssiges Clustering verwenden.
Beispiele
> OPTIMIZE events;
> OPTIMIZE events FULL;
> -- Partitioned table
> OPTIMIZE events WHERE date >= '2017-01-01';
> -- Table with liquid clustering enabled (DBR 18.1 and above)
> OPTIMIZE events FULL WHERE date >= '2025-01-01';
> OPTIMIZE events
WHERE date >= current_timestamp() - INTERVAL 1 day
ZORDER BY (eventType);
Weitere Informationen finden Sie unter Optimieren des Datendateilayouts.