Delen via


OPTIMIZE

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

Optimaliseert de indeling van Delta Lake-gegevens. U kunt desgewenst een subset van gegevens optimaliseren of gegevens per kolom rangschikken. Als u geen collocatie opgeeft en de tabel niet is gedefinieerd met liquid clustering, wordt optimalisatie van bin-packing uitgevoerd.

Syntaxis

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

Notitie

  • Optimalisatie van bin-inpakken is idempotent, wat betekent dat als deze twee keer op dezelfde gegevensset wordt uitgevoerd, de tweede keer uitvoeren geen effect heeft. Het is erop gericht om gelijkmatig verdeelde gegevensbestanden te produceren met betrekking tot hun grootte op schijf, maar niet noodzakelijkerwijs het aantal tuples per bestand. De twee metingen worden echter het vaakst gecorreleerd.
  • Z-Ordering is niet idempotent, maar beoogt een incrementele bewerking te zijn. De tijd die nodig is voor Z-Ordering is niet gegarandeerd dat deze vermindert over meerdere uitvoeringen heen. Als er echter geen nieuwe gegevens zijn toegevoegd aan een partitie die alleen Z-Geordende was, heeft een andere Z-Volgorde van die partitie geen effect. Het doel is om gegevensbestanden te produceren die gelijkmatig verdeeld zijn ten aanzien van het aantal tuples, maar niet noodzakelijkerwijs wat betreft de gegevensgrootte op de schijf. De twee metingen zijn het vaakst gecorreleerd, maar er kunnen situaties zijn waarin dat niet het geval is, wat leidt tot scheeftrekken in het optimaliseren van taaktijden.

Notitie

Terwijl u Databricks Runtime gebruikt, stelt u de Spark-configuratie inspark.databricks.delta.optimize.maxFileSizeom de grootte van het uitvoerbestand te beheren. De standaardwaarde is 1073741824, waarmee de grootte wordt ingesteld op 1 GB. Als u de waarde 104857600 opgeeft, wordt de bestandsgrootte ingesteld op 100 MB.

Belangrijk

Wanneer u de compressiecodec van een tabel wijzigt met behulp van de delta.parquet.compression.codec eigenschap, worden bestaande gegevensbestanden niet automatisch opnieuw gecomprimeerd. Als u bestaande gegevens opnieuw wilt comprimeren met de gekozen compressie-indeling, voert u de opdracht OPTIMIZE table_name FULL uit (Databricks Runtime 16.0 en hoger):

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

-- Recompress all existing data files
OPTIMIZE table_name FULL;

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:

  • WHERE

    Optimaliseer de subset van rijen die overeenkomen met het opgegeven partitiepredicaat. Alleen filters met betrekking tot partitiesleutelkenmerken worden ondersteund.

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

  • ZORDER BY

    Kolomgegevens in dezelfde set bestanden samenvoegen. Co-localiteit wordt gebruikt door Delta Lake-algoritmen voor het overslaan van gegevens om de hoeveelheid gegevens die moet worden gelezen aanzienlijk te verminderen. U kunt meerdere kolommen voor ZORDER BY opgeven als een door komma's gescheiden lijst. De effectiviteit van de lokaliteit neemt echter af met elke extra kolom.

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

Voorbeelden

> OPTIMIZE events;

> OPTIMIZE events FULL;

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

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

Zie OPTIMIZEvoor meer informatie over de opdracht .