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 salto dei file è un'ottimizzazione in lettura di Delta Lake che consente al motore Spark di evitare di scansionare i file di dati che non possono contenere righe corrispondenti. Poiché il motore legge meno dati, le query vengono eseguite più velocemente e consumano meno risorse di I/O.
Funzionamento dell'operazione di salto dei file
Ogni volta che un file di dati viene scritto in una tabella Delta, Delta Lake registra le statistiche delle colonne per file nel log delle transazioni. Queste statistiche includono il valore minimo, il valore massimo e il conteggio null per ogni colonna indicizzata in tale file.
Quando una query include un predicato di filtro, il motore confronta il valore del predicato rispetto all'intervallo min/max archiviato per ogni file. Se il valore del predicato non rientra nell'intervallo per un file, tale file viene ignorato completamente, non è necessario aprirlo o analizzarlo.
Si consideri, ad esempio, una sales tabella partizionata in cinque file di dati per intervalli di date:
| File | Statistiche min/max | Risultato per WHERE date = '2024-03-15' |
|---|---|---|
| File 1 | date [2024-01-01 .. 2024-02-28] |
Ignorato |
| File 2 | date [2024-03-01 .. 2024-03-31] |
Lettura ✓ |
| File 3 | date [2024-04-01 .. 2024-05-31] |
Ignorato |
| File 4 | date [2024-06-01 .. 2024-07-31] |
Ignorato |
| File 5 | date [2024-08-01 .. 2024-09-30] |
Ignorato |
In questo caso, vengono ignorati quattro di cinque file, ovvero 80% meno dati analizzati, perché i relativi intervalli min/max non si sovrappongono al valore del filtro.
Importante
Il tipo di dati del valore del predicato deve corrispondere al tipo di colonna. Un'incompatibilità di tipo può impedire al motore di utilizzare le statistiche a livello di file per eseguire lo skipping.
Comportamento predefinito
Delta Lake raccoglie automaticamente le statistiche dei file con le impostazioni predefinite seguenti:
- Solo le prime 32 colonne (per posizione ordinale) hanno raccolto statistiche.
- Statistiche rilevate per colonna per file: min, max e null count
- La raccolta di statistiche sulle colonne di stringhe lunghe è costosa e aggiunge un sovraccarico di scrittura, quindi il posizionamento è importante.
La delta.dataSkippingNumIndexedCols proprietà table controlla il limite di colonne. Le colonne oltre tale soglia non dispongono di statistiche a livello di file e non possono essere utilizzate per il salto dei file.
Tipi di dati idonei
Non tutti i tipi di colonna supportano le statistiche a livello di file e pertanto il salto dei file. Il motore valuta il tipo di dati di ogni colonna per determinare se è possibile raccogliere statistiche min/max.
Sempre idoneo (tipi atomici)
-
NumericType(ByteType,ShortType,IntegerType,LongType,FloatType,DoubleType,DecimalType) DateTypeTimestampTypeTimestampNTZTypeStringType
Idoneo in modo condizionale
Note
I tipi seguenti possono essere abilitati a partire da Fabric runtime spark 2.0 (Delta 4.1)
-
VariantType: quandospark.databricks.delta.variantShredding.collectVariantDataSkippingStatsè abilitato. -
ArrayType: quandospark.microsoft.delta.skipping.complexTypes.enabledè abilitato e il tipo di elemento è idoneo. -
MapType: quandospark.microsoft.delta.skipping.complexTypes.enabledè abilitato e i tipi chiave e valore sono idonei.
Non idoneo
BinaryTypeBooleanType-
StructType(nel suo complesso: i campi foglia all'interno degli struct vengono valutati singolarmente) NullType
Ottimizzare la copertura delle colonne
Per ottenere il massimo vantaggio dall'esclusione dei file, assicurati che le colonne su cui applichi più spesso i filtri siano incluse nelle statistiche dei file.
Posizionare prima le colonne filtrate di frequente
Inserire le colonne visualizzate più spesso nelle WHERE clausole, nelle chiavi di join e nei predicati di filtro nelle prime 32 posizioni ordinali dello schema della tabella. Spostare le colonne di stringhe lunghe o le colonne a bassa selettività oltre la posizione 32 per evitare di sprecare risorse di scrittura per statistiche che raramente sono utili.
Aumentare il numero di colonne indicizzate
Se la tabella include più di 32 colonne che traggono vantaggio dalle statistiche, aumentare il limite predefinito:
ALTER TABLE table_name SET TBLPROPERTIES ('delta.dataSkippingNumIndexedCols' = '40')
Note
L'aumento del numero di colonne indicizzate comporta un sovraccarico di scrittura per ogni file di dati. Aumentare questo valore solo quando le colonne aggiuntive vengono usate di frequente nei predicati di filtro.
Specificare le colonne esatte per le statistiche
Usare delta.dataSkippingStatsColumns per controllare in modo esplicito le colonne che ottengono le statistiche dei file, indipendentemente dalla posizione ordinale:
ALTER TABLE table_name SET TBLPROPERTIES ('delta.dataSkippingStatsColumns' = 'col1,col2')
Quando delta.dataSkippingStatsColumns è impostato, vengono raccolte solo le colonne specificate. Questo approccio offre un controllo accurato sul compromesso tra i costi di scrittura e il vantaggio di lettura.
Combina l'esclusione dei file con il layout dei dati
L'esclusione dei file funziona meglio quando i valori correlati sono collocati negli stessi file. Tecniche come ZORDER BY e il clustering liquido riorganizzano fisicamente i dati in modo che le righe con valori di colonna simili finisci negli stessi file. La condivisione di valori simili restringe gli intervalli min/max per ogni file, aumentando la percentuale di file che il motore può ignorare per un determinato filtro.
Per altre informazioni sull'ottimizzazione del layout dei dati, vedere Compattazione delle tabelle, Clustering liquido e Ordinamento Z.