Dela via


OPTIMIZE

Gäller för:markerad ja Databricks SQL markerad ja Databricks Runtime

Optimerar layouten för Delta Lake-data. Du kan också optimera en delmängd av data eller sortera data efter kolumn. Om du inte anger samgruppering och tabellen inte har definierats med flytande klustring utförs bin-packning optimering.

Syntax

OPTIMIZE table_name [FULL] [WHERE predicate]
  [ZORDER BY (col_name1 [, ...] ) ]

Kommentar

  • Optimering av binpackning är idempotent, vilket innebär att om den körs två gånger på samma datauppsättning har den andra körningen ingen effekt. Syftet är att skapa jämnt balanserade datafiler med avseende på deras storlek på disken, men inte nödvändigtvis antalet tupplar per fil. De två åtgärderna är dock oftast korrelerade.
  • Z-Ordering är inte idempotent utan syftar till att vara en stegvis åtgärd. Den tid det tar för Z-Beställning är inte garanterat att minska över flera körningar. Men om inga nya data har lagts till i en partition som just Z-Sorterades, kommer en ytterligare Z-sortering av partitionen inte att ha någon effekt. Syftet är att skapa jämnt balanserade datafiler med avseende på antalet tupplar, men inte nödvändigtvis datastorleken på disken. De två måtten är oftast korrelerade, men det kan finnas situationer när så inte är fallet, vilket leder till skevhet i optimera aktivitetstider.

Kommentar

När du använder Databricks Runtime för att styra utdatafilens storlek anger du Spark-konfigurationenspark.databricks.delta.optimize.maxFileSize. Standardvärdet är 1073741824, som anger storleken till 1 GB. Om du anger värdet 104857600 anges filstorleken till 100 MB.

Viktigt!

När du ändrar en tabells komprimeringskodc med hjälp av delta.parquet.compression.codec egenskapen återkomprimeras inte befintliga datafiler automatiskt. Om du vill komprimera befintliga data med det valda komprimeringsformatet kör du OPTIMIZE table_name FULL (Databricks Runtime 16.0 och senare):

-- Change compression codec
ALTER TABLE table_name SET TBLPROPERTIES ('delta.parquet.compression.codec' = 'ZSTD');

-- Recompress all existing data files
OPTIMIZE table_name FULL;

Parametrar

  • table_name

    Identifierar en befintlig Delta-tabell. Namnet får inte innehålla en temporal specifikation eller alternativspecifikation.

  • FULL

    Gäller för: kontrollera markerat ja Databricks Runtime 16.0 och senare

    Skriver om alla datafiler i tabellen. Använd OPTIMIZE table_name FULL för att:

    • Optimera hela tabellen inklusive data som tidigare kan ha klustrats (för tabeller med flytande klustring).
    • Komprimera befintliga datafiler igen när du ändrar tabellens komprimeringskodc med hjälp av delta.parquet.compression.codec egenskapen .
  • WHERE

    Optimera delmängden av rader som matchar det angivna partitionspredikatet. Endast filter som omfattar partitionsnyckelattribut stöds.

    Du kan inte använda den här klausulen på tabeller som använder flytande klustring.

  • ZORDER BY

    Samla kolumninformation i samma uppsättning filer. Samlokalitet används av algoritmer för datahopp i Delta Lake för att avsevärt minska mängden data som behöver läsas. Du kan ange flera kolumner för ZORDER BY som en kommaavgränsad lista. Lokalitetens effektivitet minskar dock med varje ytterligare kolumn.

    Du kan inte använda den här klausulen på tabeller som använder flytande klustring.

Exempel

> OPTIMIZE events;

> OPTIMIZE events FULL;

> OPTIMIZE events WHERE date >= '2017-01-01';

> OPTIMIZE events
    WHERE date >= current_timestamp() - INTERVAL 1 day
    ZORDER BY (eventType);

Mer information om kommandot OPTIMIZE finns i Optimera datafillayout.