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
Optimiert das Layout von Delta Lake-Daten. Optional können Sie eine Teilmenge der Daten optimieren oder Daten nach Spalte anordnen. Wenn Sie keine Kollokation angeben und die Tabelle nicht mit Liquid Clustering definiert ist, wird die Bin-Packing-Optimierung durchgeführt.
Syntax
OPTIMIZE table_name [FULL] [WHERE predicate]
[ZORDER BY (col_name1 [, ...] ) ]
Hinweis
- Die Optimierung der Containerverpackung ist idempotent, d. h., wenn sie zweimal auf demselben Dataset ausgeführt wird, hat die zweite Ausführung keine Auswirkung. Ziel ist, gleichmäßige Datendateien in Bezug auf deren Größe auf dem Datenträger zu erzeugen, nicht notwendigerweise in Bezug auf die Anzahl von Tupeln pro Datei. Die beiden Kennzahlen sind jedoch sehr häufig korreliert.
- Z-Ordering ist nicht idempotent, sondern zielt darauf ab, eine inkrementelle Operation zu vollziehen. Es ist nicht garantiert, dass sich die für die Z-Reihenfolge benötigte Zeit über mehrere Ausführungen hinweg verringert. Wenn jedoch keine neuen Daten zu einer Partition hinzugefügt wurden, auf die kurz zuvor eine Z-Reihenfolge angewendet wurde, hat eine weitere Anwendung der Z-Reihenfolge auf diese Partition keine Auswirkung. Ziel ist, gleichmäßige Datendateien in Bezug auf die Anzahl von Tupeln zu erzeugen, aber nicht notwendigerweise in Bezug auf die Datengröße auf dem Datenträger. Die beiden Kennzahlen sind in den meisten Fällen korreliert. Es kann jedoch Situationen geben, in denen dies nicht der Fall ist, was zu Abweichungen bei den Zeiten für die Optimierungsaufgaben führt.
Hinweis
Legen Sie beim Verwenden der Databricks-Runtime die Spark-Konfigurationspark.databricks.delta.optimize.maxFileSize fest, um die Größe der Ausgabedatei zu steuern. Der Standardwert lautet 1073741824, wodurch die Größe auf 1 GB festgelegt wird. Durch Angeben des Werts 104857600 wird die Dateigröße auf 100 MB festgelegt.
Von Bedeutung
Wenn Sie den Komprimierungscodec einer Tabelle mithilfe der delta.parquet.compression.codec Eigenschaft ändern, werden vorhandene Datendateien nicht automatisch erneut komprimiert. Um vorhandene Daten mit dem ausgewählten Komprimierungsformat neu zu komprimieren, führen Sie OPTIMIZE table_name FULL aus (Databricks Runtime 16.0 und höher):
-- Change compression codec
ALTER TABLE table_name SET TBLPROPERTIES ('delta.parquet.compression.codec' = 'ZSTD');
-- Recompress all existing data files
OPTIMIZE table_name FULL;
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 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.
WHEREOptimieren Sie die Teilmenge der Zeilen, die dem angegebenen Partitionsprädikat entsprechen. Es werden nur Filter unterstützt, die Partitionsschlüsselattribute enthalten.
Sie können diese Klausel nicht für Tabellen verwenden, die flüssige Clustering verwenden.
ZORDER BYOrdnet Spalteninformationen im gleichen Dateiensatz an. Diese Colocation wird von Delta Lake-Algorithmen zum Überspringen von Daten genutzt, um die Menge der zu lesenden Daten erheblich zu reduzieren. Für
ZORDER BYkönnen Sie mehrere Spalten in Form einer durch Kommas getrennten Liste angeben. Dabei sinkt allerdings die Effizienz der Kollokation mit jeder zusätzlichen Spalte.Sie können diese Klausel nicht für Tabellen verwenden, die flüssige Clustering verwenden.
Beispiele
> OPTIMIZE events;
> OPTIMIZE events FULL;
> OPTIMIZE events WHERE date >= '2017-01-01';
> OPTIMIZE events
WHERE date >= current_timestamp() - INTERVAL 1 day
ZORDER BY (eventType);
Weitere Informationen über den OPTIMIZE-Befehl finden Sie unter Optimieren des Datendateilayouts.