Freigeben über


OPTIMIZE

Gilt für:mit Häkchen markiert ja Databricks SQL mit Häkchen markiert ja 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

  • table_name

    Identifiziert eine vorhandene Delta-Tabelle. Der Name darf keine zeitliche Spezifikation oder Optionsspezifikation enthalten.

  • FULL

    Gilt für: Grünes Häkchen für „Ja“ Databricks Runtime 16.0 und höher

    Schreibt 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 FULL es mit einem WHERE Prä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 > 15 da sich der Bereich der Datei mit dem Prädikat überlappt.

  • WHERE

    Optimiert 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 BY

    Sortiert 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.