Optimaliseren (Delta Lake op Azure Databricks)

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

De indeling van Delta Lake-gegevens optimaliseren. Optimaliseer eventueel een subset van gegevens of plaats gegevens op kolom. Als u geen co-locatie opgeeft, wordt bin-packing optimalisatie uitgevoerd.

Notitie

  • Optimalisatie van bin-packing is idempotent,wat betekent dat als deze twee keer wordt uitgevoerd op dezelfde gegevensset, de tweede run geen effect heeft. Het is erop gericht om gegevensbestanden met gelijkmatige verdeling 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 is bedoeld als een incrementele bewerking. De tijd die nodig is voor Z-Ordering is niet gegarandeerd om het aantal runs te verminderen. Als er echter geen nieuwe gegevens zijn toegevoegd aan een partitie die alleen Z-Ordered was, heeft een andere Z-Ordering van die partitie geen effect. Het is bedoeld om gegevensbestanden met gelijkmatige balans te produceren met betrekking tot het aantal tuples, maar niet noodzakelijkerwijs de gegevensgrootte op schijf. De twee metingen zijn het vaakst gecorreleerd, maar er kunnen situaties zijn waarin dat niet het geval is, wat leidt tot scheefheid in de optimalisatie van taaktijden.
  • Als u de grootte van het uitvoerbestand wilt bepalen, stelt u de Spark-configuratie in. De standaardwaarde is 1073741824 , waarmee de grootte wordt ingesteld op 1 GB. Als u de waarde 104857600 opgeeft, wordt de bestandsgrootte op 100 MB.

WHERE

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

ZORDER BY

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

Voorbeelden

OPTIMIZE events

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

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