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.
Si applica a:
Databricks SQL
Databricks Runtime
Questa pagina descrive il OPTIMIZE comando , che ottimizza il layout dei dati Delta Lake. È possibile ottimizzare un subset di dati o posizionare i dati per colonna. Se non si specifica la collocazione e la tabella non usa clustering liquido, Delta Lake esegue l'ottimizzazione della compressione bin.
Sintassi
OPTIMIZE table_name [FULL] [WHERE predicate]
[ZORDER BY (col_name1 [, ...] ) ]
Nota
L'ottimizzazione della compressione bin è idempotente: se la si esegue due volte nello stesso set di dati, la seconda esecuzione non ha alcun effetto. Produce file di dati con bilanciamento uniforme rispetto alle dimensioni del disco, ma non necessariamente il numero di tuple per ogni file. Le due misure sono più spesso correlate.
L'ordinamento Z non è idempotente, ma funziona in modo incrementale. Il tempo impiegato dall'ordinamento Z non è garantito per diminuire su più esecuzioni. Tuttavia, se non sono stati aggiunti nuovi dati a una partizione appena Z-Ordered, l'esecuzione di nuovo Z-Ordering su tale partizione non ha alcun effetto. L'ordinamento Z produce file di dati con bilanciamento uniforme rispetto al numero di tuple, ma non necessariamente alle dimensioni dei dati su disco. Le due misure sono più spesso correlate, ma l'asimmetria nei tempi di ottimizzazione delle attività può verificarsi quando divergono.
Nota
Quando si usa Databricks Runtime, per controllare le dimensioni del file di output, impostare la configurazione spark.databricks.delta.optimize.maxFileSizedi Spark. Il valore predefinito è 1073741824 (1 GB). Se si specifica, le dimensioni del file vengono impostate 104857600 su 100 MB.
Parametri
-
Identifica una tabella Delta esistente. Il nome non deve includere una specifica temporale o una specifica delle opzioni.
FULLSi applica a:
Databricks Runtime 16.0 e versioni successiveRiscrive tutti i file di dati nella tabella. Usare
OPTIMIZE table_name FULLper:- Ottimizzare l'intera tabella, inclusi i dati precedentemente raggruppati (per le tabelle che usano clustering liquido).
- Ricomprimere i file di dati esistenti quando si modifica il codec di compressione della tabella usando la
delta.parquet.compression.codecproprietà .
Per ricomprimere i dati esistenti dopo aver modificato il codec di compressione, eseguire
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;Per ottimizzare un subset di file in una tabella con clustering liquido abilitato, combinare
FULLcon unWHEREpredicato (Databricks Runtime 18.1 e versioni successive). Sono supportati solo predicati di intervallo semplici in una singola colonna di clustering. Un file viene incluso se una parte del relativo intervallo si sovrappone al predicato. Ad esempio,OPTIMIZE events FULL WHERE date > 15include un file con intervallo(col_min = 10, col_max = 20)perché l'intervallo del file si sovrappone al predicato.WHEREOttimizza il subset di righe corrispondenti a un predicato di partizione/clustering. Sono supportati solo i filtri per gli attributi della chiave di partizione/clustering.
Per le tabelle che usano il clustering liquido, usare
OPTIMIZE table_name FULL WHERE predicateinvece (Databricks Runtime 18.1 e versioni successive).ZORDER BYColloca le informazioni sulle colonne nello stesso set di file. Gli algoritmi di data-skipping di Delta Lake usano la co-località per ridurre la quantità di dati che devono essere letti. È possibile specificare più colonne come elenco delimitato da virgole, ma l'efficacia della co-località diminuisce con ogni colonna aggiuntiva.
Non è possibile usare questa clausola nelle tabelle che usano clustering liquido.
Esempi
> 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);
Per altre informazioni, vedere Ottimizzare il layout dei file di dati.