Configurare Delta Lake per controllare le dimensioni dei file di dati
Nota
Le raccomandazioni contenute in questo articolo non si applicano alle tabelle gestite di Unity Catalog. Databricks consiglia di usare le tabelle gestite di Unity Catalog con le impostazioni predefinite per tutte le nuove tabelle Delta.
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 le tabelle gestite di Unity Catalog.
In Databricks Runtime 10.4 LTS e versioni successive, la compattazione automatica e le scritture ottimizzate sono sempre abilitate per MERGE
le operazioni , UPDATE
e DELETE
. Non è possibile disabilitare questa funzionalità.
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.
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 Skipping dei 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 e si 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 configurazione spark.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
, UPDATE
o 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 favoriscono le successive letture 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:
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 sottoqueryDELETE
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 SET 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 SET 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.