Delen via


OPTIMIZE

Van toepassing op:aangevinkt als ja Databricks SQL aangevinkt als ja Databricks Runtime

Op deze pagina wordt de OPTIMIZE opdracht beschreven, waarmee de indeling van Delta Lake-gegevens wordt geoptimaliseerd. U kunt een subset van gegevens optimaliseren of gegevens samenvoegen op kolom. Als u geen collocatie opgeeft en de tabel geen liquide clustering gebruikt, voert Delta Lake optimalisatie voor bin-packing uit.

Syntaxis

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

Notitie

Optimalisatie van bin-verpakking is idempotent: als u deze twee keer uitvoert op dezelfde gegevensset, heeft de tweede uitvoering geen effect. Het produceert gelijkmatig verdeelde gegevensbestanden met betrekking tot hun grootte op schijf, maar niet noodzakelijkerwijs het aantal tuples per bestand. De twee metingen zijn het vaakst gecorreleerd.

Z-Ordering is niet idempotent, maar werkt incrementeel. De tijd die Z-Ordering neemt, is niet gegarandeerd om te verminderen over meerdere uitvoeringen. Als er echter geen nieuwe gegevens zijn toegevoegd aan een partitie die alleen Z-Geordende was, heeft het opnieuw uitvoeren van Z-Ordering op die partitie geen effect. Z-Ordering produceert gelijkmatig verdeelde gegevensbestanden met betrekking tot het aantal tuples, maar niet noodzakelijkerwijs gegevensgrootte op schijf. De twee metingen worden meestal gecorreleerd, maar scheeftrekken in de optimalisatietaaktijden kunnen optreden wanneer ze afwijken.

Notitie

Wanneer u Databricks Runtime gebruikt, stelt u de Spark-configuratiespark.databricks.delta.optimize.maxFileSize in om de grootte van het uitvoerbestand te beheren. De standaardwaarde is 1073741824 (1 GB). 104857600 Als u opgeeft, wordt de bestandsgrootte ingesteld op 100 MB.

Parameterwaarden

  • table_name

    Identificeert een bestaande Delta-tabel. De naam mag geen tijdelijke specificatie of optiesspecificatie bevatten.

  • FULL

    Geldt voor: met een vinkje gemarkeerd als Ja Databricks Runtime 16.0 en hoger

    Alle gegevensbestanden in de tabel worden herschreven. Gebruik OPTIMIZE table_name FULL dit om:

    Als u bestaande gegevens opnieuw wilt comprimeren nadat u de compressiecodec hebt gewijzigd, voert u het volgende uit 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;
    

    Als u een subset van bestanden in een tabel wilt optimaliseren waarvoor liquide clustering is ingeschakeld, combineert FULL u met een WHERE predicaat (Databricks Runtime 18.1 en hoger). Alleen eenvoudige bereikpredicaten op één clusterkolom worden ondersteund. Een bestand wordt opgenomen als een deel van het bereik overlapt met het predicaat. Bevat bijvoorbeeld OPTIMIZE events FULL WHERE date > 15 een bestand met een bereik (col_min = 10, col_max = 20) omdat het bereik van het bestand overlapt met het predicaat.

  • WHERE

    Hiermee optimaliseert u de subset van rijen die overeenkomen met een partitie-/clusteringpredicaat. Alleen filters op partitie-/clusteringsleutelkenmerken worden ondersteund.

    Gebruik in plaats daarvan (Databricks Runtime 18.1 en hoger) voor tabellen die gebruikmaken van liquide clusteringOPTIMIZE table_name FULL WHERE predicate.

  • ZORDER BY

    Notitie

    Databricks raadt vloeibare clustering aan voor alle nieuwe tabellen in plaats van Z-volgorde. Zie Liquid Clustering gebruiken voor tabellen.

    Kolomgegevens in dezelfde set bestanden samenvoegen. Delta Lake-algoritmen voor het overslaan van gegevens maken gebruik van co-lokaliteit om de hoeveelheid gegevens te verminderen die moet worden gelezen. U kunt meerdere kolommen opgeven als een door komma's gescheiden lijst, maar de effectiviteit van co-lokaliteit neemt af met elke extra kolom.

    U kunt deze component niet gebruiken voor tabellen die gebruikmaken van liquide clustering.

Voorbeelden

> 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);

Zie Indeling van gegevensbestand optimaliseren voor meer informatie.