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.
I file della tabella Delta si frammentano con il tempo. La frammentazione aumenta il sovraccarico delle operazioni di file, riduce l'efficienza della compressione e può limitare il parallelismo del lettore. La compattazione riscrive molti file di piccole dimensioni in un minor numero di file di dimensioni corrette in modo che Spark possa leggere ed elaborare i dati in modo più efficiente.
Il OPTIMIZE comando è l'operazione di compattazione primaria. Raggruppa i file di piccole dimensioni in contenitori destinati a una dimensione file ideale, quindi li riscrive in storage.
Per linee guida trasversali ai carichi di lavoro sulle strategie di compattazione tra SQL Analytics Endpoint, Power BI Direct Lake e Spark, vedere Manutenzione e ottimizzazione delle tabelle tra carichi di lavoro.
Metodi di compattazione
Microsoft Fabric offre diversi approcci per mantenere dimensioni ottimali dei file nelle tabelle Delta:
OPTIMIZE comando
Il OPTIMIZE comando è l'operazione di base per compattare le tabelle Delta. Riscrive i file di piccole dimensioni in file di dimensioni maggiori per migliorare il layout dei dati nelle tabelle Delta.
| Proprietà | Description | Valore predefinito | Configurazione sessione |
|---|---|---|---|
| minFileSize | I file inferiori a questa soglia vengono raggruppati e riscritti come file di dimensioni maggiori. | 1073741824 (1 GB) | spark.databricks.delta.optimize.minFileSize |
| maxFileSize | Dimensioni del file di destinazione prodotte dal OPTIMIZE comando . |
1073741824 (1 GB) | spark.databricks.delta.optimize.maxFileSize |
OPTIMIZE è idempotente, ma un minFileSize sovradimensionato può aumentare l'amplificazione della scrittura. Ad esempio, con minFileSize impostato su 1 GB, un file da 900 MB potrebbe essere riscritto dopo una piccola scrittura aggiuntiva. Per indicazioni automatiche sulla gestione delle dimensioni dei file, vedere Dimensioni del file di destinazione adattivo.
OPTIMIZE con Z-Order
Quando si usa la ZORDER BY clausola , OPTIMIZE riscrivere i file attivi in modo che le righe con valori simili vengano raggruppate negli stessi file. Il layout collocato migliora l'esclusione dei file con i filtri selettivi. Usare l'ordine Z quando:
- Le query filtrano spesso due o più colonne insieme (ad esempio, date + customer_id) e
- Questi predicati sono sufficientemente selettivi da permettere il salto a livello di file, riducendo così il numero di file analizzati.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2)
OPTIMIZE con V-Order
La VORDER clausola comporta l'applicazione dell'ottimizzazione dell'ordine V nei file con ambito di compattazione. Per altre informazioni sull'ordine V, vedere la documentazione dettagliata.
OPTIMIZE dbo.table_name VORDER
È possibile combinare Z-Order e V-Order in un singolo comando. Spark applica le operazioni in questo ordine: compattazione bin → ordine Z → ordine V.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2) VORDER
Il comportamento di V-Order durante OPTIMIZE dipende dal modo in cui si invoca il comando:
| Invocazione | Behavior |
|---|---|
OPTIMIZE table VORDER |
Forza V-Order sui file riscritti, indipendentemente dalle impostazioni della sessione o della tabella. |
OPTIMIZE table (nessuna VORDER parola chiave) |
Eredita il comportamento di V-Order da TBLPROPERTIES("delta.parquet.vorder.enabled") se impostato; in caso contrario, esegue il fallback alla configurazione spark.sql.parquet.vorder.defaultdella sessione . |
OPTIMIZE con raggruppamento a liquido
Il clustering liquido viene specificato come opzione di tabella; per informazioni dettagliate, vedere Abilitare il clustering liquido . Quando il clustering liquido è abilitato, OPTIMIZE esegue la riscrittura fisica che applica i criteri di clustering.
Importante
I dati vengono raggruppati solo quando OPTIMIZE viene eseguito su tabelle abilitate per il clustering liquido. Le normali operazioni di scrittura non raggruppano i dati. Avere una strategia di compattazione, come l'uso della compattazione automatica o la pianificazione manuale di lavori di ottimizzazione, è fondamentale per garantire che i vantaggi dei dati clustered (ovvero il miglioramento del salto dei file Delta) possano essere realizzati.
Ottimizzazione rapida
Ottimizzazione rapida analizza in modo intelligente i file di tabella Delta e ignora le operazioni di compattazione che probabilmente non migliorano significativamente le prestazioni.
Invece di compattare i file in modo cieco ogni volta che esistono file di piccole dimensioni, l'ottimizzazione rapida valuta se ogni contenitore candidato (gruppo di file di piccole dimensioni) soddisfa gli obiettivi di compattazione delle procedure consigliate configurabili. Fast Optimize esegue la compattazione solo in un contenitore di file se è probabile che l'unione raggiunga le dimensioni minime di destinazione o se sono presenti troppi file di piccole dimensioni. In caso contrario, ignora il gruppo o riduce il numero di file compattati.
L'ottimizzazione veloce può essere regolata in base ai requisiti di compattazione.
| Proprietà | Description | Valore predefinito | Configurazione sessione |
|---|---|---|---|
| minNumFiles | Numero di file di piccole dimensioni che devono esistere in un contenitore per l'esecuzione dell'ottimizzazione se il bin non contiene dati sufficienti stimati per produrre un file compattato . | 50 | spark.microsoft.delta.optimize.fast.minNumFiles |
| parquetCoefficient | Moltiplicato per la dimensione minima ottimizzata del file di contesto per determinare la quantità minima di dati di piccoli file che devono esistere in un contenitore affinché il contenitore possa essere incluso nel processo di compattazione. | 1.3 | spark.microsoft.delta.optimize.fast.parquetCoefficient |
Annotazioni
I parquetCoefficient risultati comportano che la dimensione target di un bin sia maggiore della dimensione minima del file di destinazione nel contesto di ottimizzazione. Questo coefficiente rappresenta la realtà che la combinazione di più file parquet di piccole dimensioni comporta una compressione migliore e quindi meno dati rispetto alla somma di file di piccole dimensioni. Aumentare il valore per rendere più prudente la frequenza con cui l’ottimizzazione rapida salta i bin, oppure diminuirlo per consentire criteri più permissivi nel salto dei bin.
Come funziona
L'ottimizzazione rapida introduce controlli aggiuntivi prima che i contenitori vengano compattati. Per ogni contenitore candidato, l'ottimizzazione rapida valuta:
- Quantità stimata di dati non elaborati nel contenitore (somma di piccole dimensioni dei file)
- Indica se la combinazione dei file di piccole dimensioni è stimata per produrre un file che soddisfi le dimensioni minime di destinazione configurate
- Indica se il contenitore contiene almeno il numero minimo configurato di file di piccole dimensioni
L'ottimizzazione rapida valuta ogni contenitore di file di piccole dimensioni e compatta solo i bin che probabilmente raggiungono la dimensione minima di destinazione o superano il numero minimo di file. I contenitori che non soddisfano queste soglie vengono ignorati o parzialmente compattati. Saltare i bin non ottimali riduce le riscritture non necessarie, riduce l'amplificazione della scrittura e rende le attività di OPTIMIZE più idempotenti.
Annotazioni
L'implementazione esatta è soggetta a un'evoluzione nel tempo.
L'ottimizzazione rapida consente di ridurre i dati riscritti in un ciclo di vita di una tabella Delta. Come illustrato nel diagramma seguente, l'ottimizzazione rapida ignora i bin non ottimali, ottenendo processi più veloci e più idempotenti OPTIMIZE con meno amplificazione di scrittura.
Annotazioni
Solo a scopo illustrativo, i diagrammi precedenti presuppongono che le dimensioni del file scritto dalla compattazione siano la somma delle dimensioni dei file di piccole dimensioni. Implica anche un parquetCoefficient valore pari a 1.
Limitazioni
- Non applicabile alle operazioni di clustering liquido e ordine Z
- Ottimizzazione rapida non modifica il comportamento della compattazione automatica
Destinazioni di compattazione a livello di file
Per evitare la riscrittura dei dati precedentemente considerati compattati (sufficientemente grandi) in base alla modifica degli obiettivi di dimensione min e max dei file per la compattazione, è possibile abilitare spark.microsoft.delta.optimize.fileLevelTarget.enabled per prevenire la ricompattazione dei file già compattati. Se abilitata, i file non vengono ricompiatti se in precedenza soddisfano almeno la metà delle dimensioni del file di destinazione al momento della compattazione. Il mantenimento degli obiettivi a livello di file riduce al minimo l'amplificazione della scrittura quando le dimensioni dell'obiettivo di compattazione cambiano nel tempo (ad esempio, dalla valutazione e impostazione adattiva della dimensione dei file di destinazione e dall'impostazione di un obiettivo più grande). Se abilitato, il OPTIMIZE_TARGET_SIZE tag viene aggiunto ai nuovi file quando OPTIMIZE viene eseguito o per qualsiasi operazione di scrittura se è impostata la delta.targetFileSize proprietà della tabella o delta.targetFileSize.adaptive .
Annotazioni
Sebbene non sia abilitato per impostazione predefinita, Microsoft consiglia di abilitare le destinazioni di compattazione a livello di file per limitare potenziali amplificazioni di scrittura.
Compattazione automatica
La compattazione automatica valuta l'integrità delle partizioni dopo ogni operazione di scrittura. Quando rileva una frammentazione eccessiva dei file (troppi file di piccole dimensioni) all'interno di una partizione, attiva un'operazione sincrona OPTIMIZE immediatamente dopo il commit della scrittura. Questo approccio basato su writer per la manutenzione dei file è ottimale perché la compattazione viene eseguita solo quando viene determinata a livello di codice come utile.
Abilitare a livello di sessione
Impostare spark.databricks.delta.autoCompact.enabled a livello di sessione per abilitare la compattazione automatica per le nuove tabelle create nella sessione Spark:
Abilitare a livello di tabella
Impostare la proprietà delta.autoOptimize.autoCompact della tabella per abilitare la compattazione automatica per tabelle specifiche:
CREATE TABLE dbo.table_name
TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
Usare l'opzione delta.autoOptimize.autoCompact DataFrameWriter per abilitare la compattazione automatica durante la creazione di una tabella:
df.write.option('delta.autoOptimize.autoCompact', 'true').saveAsTable('dbo.table_name')
Abilitare la stessa proprietà di tabella in una tabella esistente:
ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
Ridurre il sovraccarico di valutazione
A partire da Spark Runtime 2.0 di Fabric (Delta 4.1), è possibile abilitare la modalità di compattazione automatica onCheckpointOnly. Per impostazione predefinita, la compattazione automatica valuta i metadati dei file dopo ogni operazione di scrittura per determinare se una tabella contiene troppi file di piccole dimensioni. Con onCheckpointOnly, la valutazione viene posticipata alle operazioni di checkpoint del log (in genere ogni 10 commit). Al momento del checkpoint, lo snapshot della tabella è già completamente ricostruito, quindi la valutazione legge dai metadati già presenti in memoria invece di richiedere una scansione aggiuntiva. La valutazione posticipata riduce il sovraccarico per commit, garantendo al tempo stesso la compattazione periodica delle tabelle.