Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Il OPTIMIZE comando riscrive i file di dati per migliorare il layout dei dati per le tabelle Delta Lake e Apache Iceberg. Per le tabelle con clustering liquido abilitato, OPTIMIZE riscrive i file di dati per raggruppare i dati in base alle chiavi di clustering liquido. Per le tabelle con partizioni definite, la compattazione dei file e il layout dei dati vengono eseguiti all'interno delle partizioni.
L'ottimizzazione predittiva esegue automaticamente OPTIMIZE nelle tabelle gestite di Unity Catalog. Databricks consiglia di abilitare l'ottimizzazione predittiva per tutte le tabelle gestite di Unity Catalog per semplificare la manutenzione dei dati e ridurre i costi di archiviazione. Consulta Ottimizzazione predittiva per le tabelle gestite di Unity Catalog.
Le tabelle Delta Lake senza clustering liquido possono facoltativamente includere una clausola ZORDER BY per migliorare il clustering dei dati durante la riscrittura. Le tabelle Apache Iceberg utilizzano strategie di clustering e ordinamento anziché ZORDER. Databricks consiglia di usare clustering liquido invece di partizioni, ZORDERo altri approcci di layout dei dati.
Vedete OPTIMIZE.
Importante
In Databricks Runtime 16.0 e nelle versioni successive, è possibile usare OPTIMIZE FULL per forzare il riclustering per le tabelle con liquid clustering abilitato. Per ulteriori informazioni, vedere Forzare il reclustering.
Esempi di sintassi
Attivare la compattazione eseguendo il OPTIMIZE comando :
SQL
OPTIMIZE table_name
Python
L'API DeltaTable Python è specifica di Delta Lake.
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()
Scala
L'API "DeltaTable" di Scala è specifica di Delta Lake.
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().executeCompaction()
Se si dispone di una grande quantità di dati e si vuole solo ottimizzare un subset di dati, specificare un predicato di partizione facoltativo usando WHERE:
SQL
OPTIMIZE table_name WHERE date >= '2022-11-18'
Python
L'API DeltaTable Python è specifica di Delta Lake.
from delta.tables import *
deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
Scala
L'API "DeltaTable" di Scala è specifica di Delta Lake.
import io.delta.tables._
val deltaTable = DeltaTable.forName(spark, "table_name")
deltaTable.optimize().where("date='2021-11-18'").executeCompaction()
Considera le seguenti informazioni sul bin-packing:
- L'ottimizzazione della compressione bin è idempotente, ovvero se viene eseguita due volte nello stesso set di dati, la seconda esecuzione non ha alcun effetto.
- Il bin-packing mira a produrre file di dati bilanciati in modo uniforme in termini di dimensioni di archiviazione, ma non necessariamente rispetto al numero di tuple per file. Tuttavia, le due misure sono spesso correlate.
I lettori di tabelle Delta Lake usano l'isolamento dello snapshot, il che significa che non vengono interrotti quando OPTIMIZE rimuove i file non necessari dal log delle transazioni. Poiché OPTIMIZE non apporta modifiche ai dati alla tabella, una lettura prima e dopo un oggetto OPTIMIZE ha gli stessi risultati. L'esecuzione OPTIMIZE su una tabella che è un'origine di streaming non influisce sui flussi correnti o futuri con questa tabella come origine.
OPTIMIZE restituisce le statistiche sui file (min, max, total e così via) per i file rimossi e i file aggiunti dall'operazione. Optimize stats contiene anche le statistiche di ordinamento Z, il numero di batch e le partizioni ottimizzate.
È anche possibile compattare automaticamente file di piccole dimensioni usando la compattazione automatica. Vedere Compattazione automatica.
Frequenza consigliata per l'esecuzione OPTIMIZE
Abilitare l'ottimizzazione predittiva per le tabelle gestite di Unity Catalog per garantire che OPTIMIZE venga eseguito automaticamente quando è conveniente.
Quando si sceglie la frequenza di esecuzione OPTIMIZE, esiste un compromesso tra prestazioni e costi. Per migliorare le prestazioni delle query dell'utente finale, eseguire OPTIMIZE più spesso. Ciò comporta un costo più elevato a causa dell'aumento dell'utilizzo delle risorse. Per ottimizzare i costi, eseguirlo meno spesso.
Databricks consiglia di iniziare con l'esecuzione OPTIMIZE su base giornaliera e quindi di regolare la frequenza per bilanciare i compromessi sui costi e sulle prestazioni.
Tipi di istanza consigliati per OPTIMIZE
Entrambe le operazioni richiedono un elevato utilizzo di CPU ed eseguono grandi quantità di codifica e decodifica Parquet.
Databricks consiglia i tipi di istanza ottimizzati per il calcolo.
OPTIMIZE trae vantaggio anche dalle unità SSD collegate.