Configurare Delta Lake per controllare le dimensioni dei file di dati

Delta Lake offre opzioni per configurare manualmente o automaticamente le dimensioni del file di destinazione per le operazioni di scrittura e per OPTIMIZE le operazioni. Azure Databricks ottimizza automaticamente molte di queste impostazioni e abilita funzionalità che migliorano automaticamente le prestazioni delle tabelle cercando di ottenere file di dimensioni appropriate.

Nota

In Databricks Runtime 13.3 e versioni successive Databricks consiglia di usare il clustering per il layout di tabella Delta. Vedere Usare il clustering liquido per le tabelle Delta.

Databricks consiglia di usare l'ottimizzazione predittiva per l'esecuzione OPTIMIZE automatica e VACUUM per le tabelle Delta. Vedere Ottimizzazione predittiva per Delta Lake.

In Databricks Runtime 10.4 LTS e versioni successive, la compattazione automatica e le scritture ottimizzate sono sempre abilitate per MERGEle operazioni , UPDATEe DELETE . Non è possibile disabilitare questa funzionalità.

Se non diversamente specificato, tutte le raccomandazioni contenute in questo articolo non si applicano alle tabelle gestite di Unity Catalog che eseguono i runtime più recenti.

Per le tabelle gestite di Unity Catalog, Databricks ottimizza automaticamente la maggior parte di queste configurazioni se si usa un'istanza di SQL Warehouse o Databricks Runtime 11.3 LTS o versione successiva.

Se si sta aggiornando un carico di lavoro da Databricks Runtime 10.4 LTS o versioni successive, vedere Eseguire l'aggiornamento alla compattazione automatica in background.

Quando eseguire OPTIMIZE

La compattazione automatica e le scritture ottimizzate riducono ogni piccolo problema di file, ma non sono una sostituzione completa per OPTIMIZE. In particolare per le tabelle di dimensioni superiori a 1 TB, Databricks consiglia di eseguire OPTIMIZE in base a una pianificazione per consolidare ulteriormente i file. Azure Databricks non viene eseguito ZORDER automaticamente nelle tabelle, quindi è necessario eseguirlo OPTIMIZE con ZORDER per abilitare l'eliminazione avanzata dei dati. Vedere Ignorare i dati per Delta Lake.

Che cos'è l'ottimizzazione automatica in Azure Databricks?

Il termine ottimizzazione automatica viene talvolta usato per descrivere le funzionalità controllate dalle impostazioni delta.autoOptimize.autoCompact e delta.autoOptimize.optimizeWrite. Questo termine è stato ritirato a favore della descrizione di ogni impostazione singolarmente. Vedere Compattazione automatica per Delta Lake in Azure Databricks e Scritture ottimizzate per Delta Lake in Azure Databricks.

Compattazione automatica per Delta Lake in Azure Databricks

La compattazione automatica combina file di piccole dimensioni all'interno delle partizioni di tabella Delta per ridurre automaticamente i piccoli problemi di file. La compattazione automatica si verifica dopo che una scrittura in una tabella ha avuto esito positivo ed esegue in modo sincrono nel cluster che ha eseguito la scrittura. La compattazione automatica compatta solo i file che non sono stati compattati in precedenza.

È possibile controllare le dimensioni del file di output impostando la configurazionespark.databricks.delta.autoCompact.maxFileSize di Spark. Databricks consiglia di usare l'ottimizzazione automatica in base alle dimensioni del carico di lavoro o della tabella. Vedere Ridimensionamento automatico dei file in base alle dimensioni del carico di lavoro e del file di ottimizzazione automatica in base alle dimensioni della tabella.

La compattazione automatica viene attivata solo per le partizioni o le tabelle con almeno un certo numero di file di piccole dimensioni. Facoltativamente, è possibile modificare il numero minimo di file necessari per attivare la compattazione automatica impostando spark.databricks.delta.autoCompact.minNumFiles.

La compattazione automatica può essere abilitata a livello di tabella o sessione usando le impostazioni seguenti:

  • Proprietà Table: delta.autoOptimize.autoCompact
  • Impostazione sparkSession: spark.databricks.delta.autoCompact.enabled

Queste impostazioni accettano le opzioni seguenti:

Opzioni Comportamento
auto (scelta consigliata) Dimensioni del file di destinazione di Tunes rispettando altre funzionalità di ottimizzazione automatica. Richiede Databricks Runtime 10.4 LTS o versione successiva.
legacy Alias per true. Richiede Databricks Runtime 10.4 LTS o versione successiva.
true Usare 128 MB come dimensione del file di destinazione. Nessun ridimensionamento dinamico.
false Disattiva la compattazione automatica. Può essere impostato a livello di sessione per eseguire l'override della compattazione automatica per tutte le tabelle Delta modificate nel carico di lavoro.

Importante

In Databricks Runtime 9.1 LTS, quando altri writer eseguono operazioni come DELETE, MERGE, UPDATEo OPTIMIZE contemporaneamente, la compattazione automatica può causare l'esito negativo di tali altri processi con un conflitto di transazioni. Questo non è un problema in Databricks Runtime 10.4 LTS e versioni successive.

Scritture ottimizzate per Delta Lake in Azure Databricks

Le scritture ottimizzate migliorano le dimensioni dei file durante la scrittura dei dati e traggono vantaggio dalle letture successive nella tabella.

Le scritture ottimizzate sono più efficaci per le tabelle partizionate, in quanto riducono il numero di file di piccole dimensioni scritti in ogni partizione. La scrittura di un numero minore di file di grandi dimensioni è più efficiente rispetto alla scrittura di molti file di piccole dimensioni, ma è comunque possibile che si verifichi un aumento della latenza di scrittura perché i dati vengono casuali prima della scrittura.

L'immagine seguente illustra il funzionamento delle scritture ottimizzate:

Scritture ottimizzate

Nota

Potrebbe essere presente codice in esecuzione coalesce(n) o repartition(n) subito prima di scrivere i dati per controllare il numero di file scritti. Le scritture ottimizzate eliminano la necessità di usare questo modello.

Le scritture ottimizzate sono abilitate per impostazione predefinita per le operazioni seguenti in Databricks Runtime 9.1 LTS e versioni successive:

  • MERGE
  • UPDATE con sottoquery
  • DELETE con sottoquery

Le scritture ottimizzate sono abilitate anche per CTAS istruzioni e INSERT operazioni quando si usano i warehouse SQL. In Databricks Runtime 13.3 LTS e versioni successive, tutte le tabelle Delta registrate in Unity Catalog hanno ottimizzato le scritture abilitate per CTAS istruzioni e INSERT operazioni per le tabelle partizionate.

Le scritture ottimizzate possono essere abilitate a livello di tabella o sessione usando le impostazioni seguenti:

  • Impostazione tabella: delta.autoOptimize.optimizeWrite
  • Impostazione sparkSession: spark.databricks.delta.optimizeWrite.enabled

Queste impostazioni accettano le opzioni seguenti:

Opzioni Comportamento
true Usare 128 MB come dimensione del file di destinazione.
false Disattiva le scritture ottimizzate. Può essere impostato a livello di sessione per eseguire l'override della compattazione automatica per tutte le tabelle Delta modificate nel carico di lavoro.

Impostare le dimensioni di un file di destinazione

Se si desidera ottimizzare le dimensioni dei file nella tabella Delta, impostare la proprietàdelta.targetFileSize table sulle dimensioni desiderate. Se questa proprietà è impostata, tutte le operazioni di ottimizzazione del layout dei dati eseguiranno un tentativo di generare file delle dimensioni specificate. Gli esempi includono l'ottimizzazione o l'ordine Z, la compattazione automatica e le scritture ottimizzate.

Nota

Quando si usano tabelle gestite di Unity Catalog e SQL Warehouse o Databricks Runtime 11.3 LTS e versioni successive, solo OPTIMIZE i comandi rispettano l'impostazione targetFileSize .

Proprietà Table
delta.targetFileSize

Tipo: dimensioni in byte o unità superiori.

Dimensioni del file di destinazione. Ad esempio, 104857600 (byte) o 100mb.

Valore predefinito: Nessuno

Per le tabelle esistenti, è possibile impostare e annullare l'impostazione delle proprietà usando il comando SQL ALTER TABLE edizione Standard T TBL PROPERTIES. È anche possibile impostare queste proprietà automaticamente durante la creazione di nuove tabelle usando configurazioni di sessione Spark. Per informazioni dettagliate, vedere Informazioni di riferimento sulle proprietà della tabella Delta.

Ridimensionare automaticamente i file in base al carico di lavoro

Databricks consiglia di impostare la proprietà delta.tuneFileSizesForRewrites della tabella su true per tutte le tabelle destinate a molte MERGE o operazioni DML, indipendentemente dal runtime di Databricks, dal catalogo Unity o da altre ottimizzazioni. Se impostato su true, le dimensioni del file di destinazione per la tabella vengono impostate su una soglia molto inferiore, che accelera le operazioni a elevato utilizzo di scrittura.

Se non è impostato in modo esplicito, Azure Databricks rileva automaticamente se 9 delle ultime 10 operazioni precedenti in una tabella Delta erano MERGE operazioni e imposta la proprietà della tabella su true. Per evitare questo comportamento, è necessario impostare in modo esplicito questa proprietà false .

Proprietà Table
delta.tuneFileSizesForRewrites

Tipo: Boolean

Indica se ottimizzare le dimensioni dei file per l'ottimizzazione del layout dei dati.

Valore predefinito: Nessuno

Per le tabelle esistenti, è possibile impostare e annullare l'impostazione delle proprietà usando il comando SQL ALTER TABLE edizione Standard T TBL PROPERTIES. È anche possibile impostare queste proprietà automaticamente durante la creazione di nuove tabelle usando configurazioni di sessione Spark. Per informazioni dettagliate, vedere Informazioni di riferimento sulle proprietà della tabella Delta.

Ridimensionare automaticamente il file in base alle dimensioni della tabella

Per ridurre al minimo la necessità di ottimizzazione manuale, Azure Databricks ottimizza automaticamente le dimensioni del file delle tabelle Delta in base alle dimensioni della tabella. Azure Databricks userà dimensioni di file più piccole per tabelle più piccole e dimensioni di file maggiori per tabelle di dimensioni maggiori, in modo che il numero di file nella tabella non sia troppo grande. Azure Databricks non consente di ottimizzare le tabelle con dimensioni di destinazione specifiche o in base a un carico di lavoro con riscritture frequenti.

Le dimensioni del file di destinazione si basano sulle dimensioni correnti della tabella Delta. Per le tabelle inferiori a 2,56 TB, le dimensioni del file di destinazione con ottimizzazione automatica sono pari a 256 MB. Per le tabelle con dimensioni comprese tra 2,56 TB e 10 TB, le dimensioni di destinazione aumentano in modo lineare da 256 MB a 1 GB. Per le tabelle superiori a 10 TB, le dimensioni del file di destinazione sono 1 GB.

Nota

Quando le dimensioni del file di destinazione per una tabella aumentano, i file esistenti non vengono ottimizzati nuovamente in file di dimensioni maggiori tramite il OPTIMIZE comando . Una tabella di grandi dimensioni può quindi avere sempre alcuni file inferiori alle dimensioni di destinazione. Se è necessario ottimizzare anche i file più piccoli in file di dimensioni maggiori, è possibile configurare una dimensione fissa del file di destinazione per la tabella usando la delta.targetFileSize proprietà table.

Quando una tabella viene scritta in modo incrementale, le dimensioni e i conteggi dei file di destinazione saranno vicini ai numeri seguenti, in base alle dimensioni della tabella. I conteggi dei file in questa tabella sono solo un esempio. I risultati effettivi saranno diversi a seconda di molti fattori.

Dimensioni della tabella Dimensioni del file di destinazione Numero approssimativo di file nella tabella
10 GB 256 MB 40
1 TB 256 MB 4096
2,56 TB 256 MB 10240
3 TB 307 MB 12108
5 TB 512 MB 17339
7 TB 716 MB 20784
10 TB 1 GB 24437
20 TB 1 GB 34437
50 TB 1 GB 64437
100 TB 1 GB 114437

Limitare le righe scritte in un file di dati

In alcuni casi, le tabelle con dati stretti possono verificarsi un errore in cui il numero di righe in un determinato file di dati supera i limiti di supporto del formato Parquet. Per evitare questo errore, è possibile usare la configurazione spark.sql.files.maxRecordsPerFile di sessione SQL per specificare il numero massimo di record da scrivere in un singolo file per una tabella Delta Lake. La specifica di un valore pari a zero o un valore negativo non rappresenta alcun limite.

In Databricks Runtime 11.3 LTS e versioni successive è anche possibile usare l'opzione maxRecordsPerFile DataFrameWriter quando si usano le API DataFrame per scrivere in una tabella Delta Lake. Quando maxRecordsPerFile viene specificato, il valore della configurazione spark.sql.files.maxRecordsPerFile della sessione SQL viene ignorato.

Nota

Databricks non consiglia l'uso di questa opzione a meno che non sia necessario evitare l'errore menzionato in precedenza. Questa impostazione potrebbe essere comunque necessaria per alcune tabelle gestite di Unity Catalog con dati molto stretti.

Eseguire l'aggiornamento alla compattazione automatica in background

La compattazione automatica in background è disponibile per le tabelle gestite di Unity Catalog in Databricks Runtime 11.3 LTS e versioni successive. Quando si esegue la migrazione di un carico di lavoro o di una tabella legacy, eseguire le operazioni seguenti:

  • Rimuovere la configurazione spark.databricks.delta.autoCompact.enabled di Spark dalle impostazioni di configurazione del cluster o del notebook.
  • Per ogni tabella, eseguire ALTER TABLE <table_name> UNSET TBLPROPERTIES (delta.autoOptimize.autoCompact) per rimuovere le impostazioni di compattazione automatica legacy.

Dopo aver rimosso queste configurazioni legacy, verrà visualizzata la compattazione automatica in background attivata automaticamente per tutte le tabelle gestite di Unity Catalog.