OPTIMIZE
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 [WHERE predicate]
[ZORDER BY (col_name1 [, ...] ) ]
Hinweis
- Die Bin-Packing-Optimierung ist idempotent. Dies bedeutet, dass bei einer zweimaligen Ausführung für dasselbe Dataset der zweite Durchlauf keine Auswirkungen hat. 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.
- Die Z-Reihenfolge ist nicht idempotent, sondern zielt darauf ab, ein inkrementeller Vorgang zu sein. 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 von Databricks Runtime die Spark-Konfiguration spark.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.
Parameter
-
Identifiziert eine vorhandene Delta-Tabelle. Der Name darf keine temporale Spezifikation enthalten.
WHERE
Optimieren 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 Liquid Clustering verwenden.
ZORDER BY
Ordnet 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 BY
kö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 Liquid Clustering verwenden.
Beispiele
> OPTIMIZE events;
> OPTIMIZE events WHERE date >= '2017-01-01';
> OPTIMIZE events
WHERE date >= current_timestamp() - INTERVAL 1 day
ZORDER BY (eventType);
Weitere Informationen zum Befehl OPTIMIZE
finden Sie unter Optimieren des Datendateilayouts.