Eliminazione dinamica dei file

Quando una query collega una grande tabella Delta Lake a una tabella più piccola e filtrata, i valori del filtro non sono noti fino all'esecuzione della query. Senza potatura in tempo reale, la query scansiona ogni file nella tabella grande, anche quelli che non contengono righe corrispondenti. L'eliminazione dinamica dei file risolve questo problema. In fase di esecuzione, l'ottimizzatore spinge i risultati del filtro da un lato della join fino alla scansione della tabella Delta Lake e salta i file che non possono contenere righe corrispondenti.

L'eliminazione automatica dei file è abilitata per impostazione predefinita. Non è necessario modificare le tue query per trarne vantaggio.

Quando si applica la rimozione dinamica dei file

La potatura dinamica dei file si applica solo alle operazioni di join sulle tabelle Delta Lake. In un'istruzione MERGE, utilizza i valori della chiave join della sorgente per saltare i file target quando la condizione di merge confronta una colonna sorgente con una colonna target per l'uguaglianza. Nelle istruzioni UPDATE e DELETE si applica quando la condizione contiene una sottoquery che effettua lo stesso tipo di confronto.

L'eliminazione dinamica dei file nelle istruzioni MERGE, UPDATE e DELETE richiede il compute con Photon abilitato. Per le SELECT query, Photon offre una potatura dinamica dei file più ampia e affidabile. Senza Photon, la potatura dinamica dei file potrebbe comunque applicarsi alle SELECT istruzioni, a seconda della forma della query e del piano di esecuzione. Vedi Che cos'è Photon?.

La potatura dinamica dei file migliora le prestazioni soprattutto per tabelle non partizionate e per i join su colonne non partizionate. Di default, si attiva solo quando la grande tabella Delta Lake nella join è di almeno 10 GB e contiene almeno 10 file. Vedere Configurazione.

La potatura dinamica dei file riduce anche i conflitti di scrittura. Quando Delta Lake verifica la presenza di conflitti durante un commit, considera file che sono stati saltati nella potatura dinamica dei file. Questo riduce il numero di transazioni fallite. Vedere Livelli di isolamento e conflitti di scrittura.

Procedure consigliate

L'effetto sulle prestazioni della potatura dinamica dei file è correlato con il modo in cui i dati vengono raggruppati. Se i valori usati per il join sono distribuiti su ogni file, la potatura dinamica dei file salta pochi file. Per aiutare la rimozione dinamica dei file a saltare più file, segui queste pratiche:

  • Usa liquid clustering sulle colonne su cui esegui frequentemente join, così che le righe corrispondenti siano co-locate in meno file.
  • Usa il calcolo abilitato per Photon, richiesto dalle istruzioni SQL MERGE, UPDATE e DELETE per la potatura dinamica dei file.

Configurazione

La maggior parte dei carichi di lavoro non ha bisogno di cambiare queste impostazioni. Considera di regolare le soglie se una join con una tabella Delta Lake più piccola trarrebbe beneficio dal pruning ma rimane sotto la soglia predefinita di dimensione o numero di file.

Queste proprietà di configurazione di Apache Spark controllano la potatura dinamica dei file:

Property Type Default Description
spark.databricks.optimizer.dynamicFilePruning Boolean true Attiva o disattiva la potatura dinamica dei file.
spark.databricks.optimizer.deltaTableSizeThreshold Long 10000000000 (10 GB) La dimensione minima, in byte, della grande tabella Delta Lake nella join che attiva la potatura dinamica dei file. Per una tabella più piccola, scansionare l'intera tabella di solito è più economico che applicare i filtri.
Per trovare la dimensione di una tabella Delta Lake, esegui DESCRIBE DETAIL table_name e controlla la colonna sizeInBytes.
spark.databricks.optimizer.deltaTableFilesThreshold Integer 10 Il numero minimo di file nella grande tabella Delta Lake nell'operazione di join che innesca l'eliminazione dinamica dei file. Se la tabella ha meno file di questa soglia, la potatura dinamica dei file non viene eseguita, perché potrebbe non valere la pena per una tabella con pochi file.
Per trovare il numero di file in una tabella Delta Lake, esegui DESCRIBE DETAIL table_name e controlla la numFiles colonna.