Ottimizzazione della tabella Delta Lake e ordine V
Il formato di tabella Lakehouse e Delta Lake sono fondamentali per Microsoft Fabric, assicurando che le tabelle siano ottimizzate per l'analisi è un requisito fondamentale. Questa guida illustra i concetti, le configurazioni e le configurazioni per l'ottimizzazione delle tabelle Delta Lake e come applicarli ai modelli di utilizzo di Big Data più comuni.
Importante
Microsoft Fabric è attualmente disponibile in ANTEPRIMA. Queste informazioni si riferiscono a un prodotto in versione preliminare che può essere modificato in modo sostanziale prima del rilascio. Microsoft non fornisce alcuna garanzia, espressa o implicita, rispetto alle informazioni fornite qui.
Che cos'è V-Order?
V-Order è un'ottimizzazione del tempo di scrittura nel formato di file parquet che consente letture velocissime nei motori di calcolo di Microsoft Fabric, ad esempio Power BI, SQL, Spark e altri.
I motori Power BI e SQL usano la tecnologia Microsoft Verti-Scan e i file Parquet ordinati in V per ottenere tempi di accesso ai dati in memoria simili. Spark e altri motori di calcolo non Verti-Scan traggono vantaggio anche dai file ordinati con una media del 10% più veloce, con alcuni scenari fino al 50%.
V-Order funziona applicando speciali ordinazioni, distribuzione di gruppi di righe, codifica dizionario e compressione su file parquet, richiedendo così meno risorse di rete, disco e CPU nei motori di calcolo per leggerlo, offrendo efficienza dei costi e prestazioni. L'ordinamento V-Order ha un impatto del 15% sui tempi di scrittura medi, ma offre fino al 50% più compressione.
Il formato parquet open source del 100% è conforme; tutti i motori parquet possono leggerlo come normali file parquet. Le tabelle delta sono più efficienti che mai; funzionalità come Z-Order sono compatibili con V-Order. Le proprietà della tabella e i comandi di ottimizzazione possono essere usati nel controllo V-Order nelle relative partizioni.
V-Order viene applicato a livello di file parquet. Tabelle Delta e relative caratteristiche, ad esempio Z-Order, compattazione, vuoto, viaggio nel tempo e così via. sono ortogonali a V-Order, come tale, sono compatibili e possono essere utilizzati insieme per vantaggi aggiuntivi.
Controllo delle scritture in ordine virtuale
L'ordine virtuale è abilitato per impostazione predefinita in Microsoft Fabric e in Apache Spark è controllato dalle configurazioni seguenti
Configurazione | Valore predefinito | Descrizione |
---|---|---|
spark.sql.parquet.vorder.enabled | true | Controlla la scrittura nell'ordine V a livello di sessione. |
TBLPROPERTIES("delta.parquet.vorder.enabled") | false | Modalità V-Order predefinita nelle tabelle |
Opzione writer dataframe: parquet.vorder.enabled | Annullata | Controllare le scritture V-Order usando il writer di dataframe |
Usare i comandi seguenti per controllare l'utilizzo delle scritture V-Order.
Controllare la configurazione dell'ordine virtuale nella sessione di Apache Spark
%%sql
GET spark.sql.parquet.vorder.enabled
Disabilitare la scrittura in ordine virtuale nella sessione di Apache Spark
%%sql
SET spark.sql.parquet.vorder.enabled=FALSE
Abilitare la scrittura in ordine virtuale nella sessione di Apache Spark
Importante
Se abilitata a livello di sessione. Tutte le scritture parquet vengono eseguite con V-Order abilitato. Sono incluse le tabelle parquet non Delta e le tabelle Delta con la parquet.vorder.enabled
proprietà table impostata su true
o false
.
%%sql
SET spark.sql.parquet.vorder.enabled=TRUE
Controllare V-Order usando le proprietà della tabella Delta
Abilitare la proprietà della tabella V-Order durante la creazione della tabella:
%%sql
CREATE TABLE person (id INT, name STRING, age INT) USING parquet TBLPROPERTIES("delta.parquet.vorder.enabled","true");
Importante
Quando la proprietà table è impostata su true; I comandi INSERT, UPDATE e MERGE si comportano come previsto ed eseguono. Se la configurazione della sessione V-Order è impostata su true o spark.write la abilita, le scritture saranno V-Order anche se TBLPROPERTIES è impostato su false.
Abilitare o disabilitare V-Order modificando la proprietà della tabella:
%%sql
ALTER TABLE person SET TBLPROPERTIES("delta.parquet.vorder.enabled","true");
ALTER TABLE person SET TBLPROPERTIES("delta. parquet.vorder.enabled","false");
ALTER TABLE person UNSET TBLPROPERTIES("delta.parquet.vorder.enabled");
Dopo aver abilitato o disabilitato V-Order usando le proprietà della tabella, vengono interessate solo le scritture future nella tabella. I file Parquet mantengono l'ordinamento usato al momento della creazione. Per modificare la struttura fisica corrente in modo da applicare o rimuovere V-Order, leggere la sezione "Control V-Order durante l'ottimizzazione di una tabella".
Controllo diretto dell'ordine virtuale sulle operazioni di scrittura
Tutti i comandi di scrittura di Apache Spark ereditano l'impostazione di sessione, se non esplicita. Tutti i comandi seguenti scrivono usando V-Order ereditando in modo implicito la configurazione della sessione.
df_source.write\
.format("delta")\
.mode("append")\
.saveAsTable("myschema.mytable")
DeltaTable.createOrReplace(spark)\
.addColumn("id","INT")\
.addColumn("firstName","STRING")\
.addColumn("middleName","STRING")\
.addColumn("lastName","STRING",comment="surname")\
.addColumn("birthDate","TIMESTAMP")\
.location("Files/people")\
.execute()
df_source.write\
.format("delta")\
.mode("overwrite")\
.option("replaceWhere","start_date >= '2017-01-01' AND end_date <= '2017-01-31'")\
.saveAsTable("myschema.mytable")
Importante
V-Order applica solo i file interessati dal predicato.
In una sessione in cui spark.sql.parquet.vorder.enabled
non è impostato o impostato su false, i comandi seguenti scriverebbero usando V-Order:
df_source.write\
.format("delta")\
.mode("overwrite")\
.option("replaceWhere","start_date >= '2017-01-01' AND end_date <= '2017-01-31'")\
.option("parquet.vorder.enabled ","true")\
.saveAsTable("myschema.mytable")
DeltaTable.createOrReplace(spark)\
.addColumn("id","INT")\
.addColumn("firstName","STRING")\
.addColumn("middleName","STRING")\
.addColumn("lastName","STRING",comment="surname")\
.addColumn("birthDate","TIMESTAMP")\
.option("parquet.vorder.enabled","true")\
.location("Files/people")\
.execute()
Che cos'è la scrittura ottimizzata?
I carichi di lavoro analitici nei motori di elaborazione di Big Data, ad esempio Apache Spark, eseguono in modo più efficiente quando si usano dimensioni di file più grandi standardizzate. La relazione tra le dimensioni del file, il numero di file, il numero di ruoli di lavoro Spark e le relative configurazioni, svolgono un ruolo fondamentale sulle prestazioni. I carichi di lavoro di inserimento in tabelle data lake possono avere la caratteristica ereditata di scrivere costantemente molti file di piccole dimensioni; questo scenario è comunemente noto come "problema di file di piccole dimensioni".
Optimize Write è una funzionalità Delta Lake in Microsoft Fabric e Azure Synapse Analytics nel motore Apache Spark che riduce il numero di file scritti e mira ad aumentare le dimensioni dei singoli file dei dati scritti. Le dimensioni del file di destinazione possono essere modificate in base ai requisiti del carico di lavoro usando le configurazioni.
La funzionalità è abilitata per impostazione predefinita in Microsoft Fabric Runtime per Apache Spark. Per altre informazioni su Ottimizzare gli scenari di utilizzo di scrittura, leggere l'articolo La necessità di ottimizzare la scrittura in Apache Spark
Ottimizzazione unione
Il comando Delta Lake MERGE consente agli utenti di aggiornare una tabella delta con condizioni avanzate. Può aggiornare i dati da una tabella di origine, una vista o un dataframe in una tabella di destinazione tramite il comando MERGE. Tuttavia, l'algoritmo corrente nella distribuzione open source di Delta Lake non è completamente ottimizzato per la gestione delle righe non modificate. Il team di Microsoft Spark Delta ha implementato un'ottimizzazione unione casuale ridotta personalizzata, le righe non modificate vengono escluse da un'operazione di shuffling dispendiosa necessaria per l'aggiornamento delle righe corrispondenti.
L'implementazione è controllata dalla spark.microsoft.delta.merge.lowShuffle.enabled
configurazione, abilitata per impostazione predefinita nel runtime. Non richiede modifiche al codice ed è completamente compatibile con la distribuzione open source di Delta Lake. Per altre informazioni sugli scenari di utilizzo dell'unione casuale bassa, vedere l'articolo Ottimizzazione unione casuale bassa nelle tabelle Delta
Manutenzione delle tabelle Delta
Quando le tabelle Delta cambiano, l'efficienza dei costi di archiviazione e delle prestazioni tende a peggiorare per i motivi seguenti:
- I nuovi dati aggiunti alla tabella possono inclinare i dati
- La velocità di inserimento dei dati in batch e in streaming potrebbe portare in molti file di piccole dimensioni
- Le operazioni di aggiornamento ed eliminazione creano infine un sovraccarico di lettura; I file parquet non sono modificabili per impostazione predefinita, quindi le tabelle Delta aggiungono nuovi file parquet che il set di modifiche amplifica ulteriormente i problemi imposti dai primi due elementi.
- I file di dati e i file di log non sono più necessari nell'archiviazione.
Per mantenere le tabelle allo stato ottimale per ottenere prestazioni ottimali, eseguire operazioni di compattazione bin e vacuuming nelle tabelle Delta. La compattazione bin viene ottenuta dal comando OPTIMIZE ; unisce tutte le modifiche in file Parquet più grandi e consolidati. La pulizia dell'archiviazione dereferenziata viene ottenuta dal comando VACUUM .
Importante
La progettazione corretta della struttura fisica della tabella in base alla frequenza di inserimento e ai modelli di lettura previsti è probabilmente più importante dell'esecuzione dei comandi di ottimizzazione descritti in questa sezione.
Controllare l'ordine virtuale durante l'ottimizzazione di una tabella
Il comando seguente struttura bin-compact e riscrive tutti i file interessati usando V-Order, indipendentemente dall'impostazione TBLPROPERTIES o dall'impostazione di configurazione della sessione:
%%sql
OPTIMIZE <table|fileOrFolderPath> VORDER;
OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> VORDER;
OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> [ZORDER BY (col_name1, col_name2, ...)] VORDER;
Quando ZORDER e VORDER vengono usati insieme, Apache Spark esegue la compattazione bin, ZORDER, VORDER in sequenza.
I comandi seguenti bin-compact e riscrivono tutti i file interessati usando l'impostazione TBLPROPERTIES. Se TBLPROPERTIES è impostato su V-Order, tutti i file interessati vengono scritti come V-Order. Se TBLPROPERTIES non è impostato o impostato su false su V-Order, eredita l'impostazione della sessione; quindi per rimuovere V-Order dalla tabella, impostare la configurazione della sessione su false.
%%sql
OPTIMIZE <table|fileOrFolderPath>;
OPTIMIZE <table|fileOrFolderPath> WHERE predicate;
OPTIMIZE <table|fileOrFolderPath> WHERE predicate [ZORDER BY (col_name1, col_name2, ...)];