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.
Il formato Lakehouse e Delta Lake è fondamentale per Microsoft Fabric. Mantenere ottimizzate le tabelle Delta è fondamentale per le prestazioni e l'efficienza dei costi per i carichi di lavoro di analisi.
Questo articolo illustra quando usare l'ordine V e illustra i modelli di configurazione e manutenzione principali per le tabelle Delta.
Usare questo articolo per:
- Comprendere i cambiamenti di V-Order e quando sono utili.
- Comprendere in che modo l'ordine Z e l'ordine V si integrano tra loro.
- Scegliere il livello di controllo corretto: sessione, proprietà della tabella o operazione di scrittura.
- Applicare i modelli di manutenzione della tabella Delta nel contesto di runtime Spark corretto.
Per indicazioni su quando applicare l'ordine V in base agli scenari di consumo, vedere Manutenzione e ottimizzazione delle tabelle trasversale ai carichi di lavoro.
Cos'è V-Order?
V-Order è un'ottimizzazione durante la scrittura per i file Parquet che può migliorare le prestazioni delle query downstream nei motori Fabric.
A colpo d'occhio:
- Dove è più utile: Modelli con elevato utilizzo di lettura, ad esempio dashboard, analisi interattiva e analisi ripetute.
- Come è utile: Riorganizza il layout Parquet (ad esempio, distribuzione, codifica e compressione dei gruppi di righe) per migliorare l'efficienza di lettura.
- Compromesso tipico: Le scritture potrebbero richiedere più tempo (spesso circa 15% in media), mentre le letture possono migliorare significativamente a seconda del carico di lavoro.
- Compatibilità del motore: I file rimangono conformi a Parquet open source e le funzionalità Delta come Z-Order rimangono compatibili.
- Ambito: V-Order è a livello di file. Con esso è possibile usare operazioni delta come compattazione, vuoto e tempo di viaggio.
Controllare le scritture degli ordini virtuali
V-Order viene usato per ottimizzare il layout dei file Parquet per prestazioni di query più veloci, in particolare negli scenari con utilizzo elevato di lettura. In Microsoft Fabric, V-Order è disabilitato per impostazione predefinita per tutte le aree di lavoro appena create per ottimizzare le prestazioni di carichi di lavoro di ingegneria dei dati con alto volume di scrittura.
Il comportamento del V-Order in Apache Spark viene controllato tramite le configurazioni seguenti:
| Impostazione | Valore predefinito | Descrizione |
|---|---|---|
spark.sql.parquet.vorder.default |
false |
Controlla la scrittura dell'ordine V a livello di sessione. Impostare su false per impostazione predefinita nei nuovi spazi di lavoro di Fabric. |
TBLPROPERTIES("delta.parquet.vorder.enabled") |
Non impostato | Controlla il comportamento predefinito del V-Order a livello di tabella. |
Opzione del writer di DataFrame: parquet.vorder.enabled |
Non impostato | Usato per controllare V-Order a livello di operazione di scrittura. |
Usare i comandi seguenti per abilitare o eseguire l'override delle scritture V-Order a seconda delle esigenze del tuo scenario.
L'V-Order è disabilitato per impostazione predefinita nelle nuove aree di lavoro di Fabric (spark.sql.parquet.vorder.default=false) per migliorare le prestazioni di scrittura delle pipeline di inserimento e trasformazione.
Per carichi di lavoro con elevato utilizzo di lettura, ad esempio query interattive o dashboard, abilitare V-Order impostando spark.sql.parquet.vorder.default su true. È anche possibile passare ai profili delle risorse readHeavyforSpark o ReadHeavy, che abilitano automaticamente il V-Order per le prestazioni incentrate sulla lettura.
In Fabric runtime 1.3 e versioni successive l'impostazione spark.sql.parquet.vorder.enable viene rimossa. Poiché L'ordine V può essere applicato automaticamente durante l'ottimizzazione Delta con OPTIMIZE, non è necessaria questa impostazione precedente. Se si esegue la migrazione da versioni di runtime precedenti, rimuovere questa impostazione dal codice.
Controllare la configurazione di V-Order nella sessione di Apache Spark
Usare questi comandi per confermare il valore della sessione corrente prima di modificarlo.
%%sql
SET spark.sql.parquet.vorder.default
Disabilitare la scrittura di V-Order nella sessione di Apache Spark
Utilizzare questi comandi quando il carico di lavoro consiste principalmente in operazioni di scrittura e si desidera un'inserimento o trasformazione più rapidi.
%%sql
SET spark.sql.parquet.vorder.default=FALSE
Abilitare la scrittura di V-Order nella sessione di Apache Spark
Quando si abilita V-Order a livello di sessione, tutte le scritture Parquet in tale sessione usano V-Order, incluse le tabelle Parquet non Delta e le tabelle Delta anche se parquet.vorder.enabled è impostata in modo esplicito su false.
%%sql
SET spark.sql.parquet.vorder.default=TRUE
Controllare V-Order, usando le proprietà della tabella Delta
Questa sezione usa Spark SQL solo perché le proprietà della tabella vengono definite tramite istruzioni e DDL ALTER TABLE SQL.
Usare le proprietà della tabella quando si desidera un valore predefinito a livello di tabella che si applica tra le sessioni.
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");
Quando la proprietà table è impostata su true, INSERT, UPDATE e MERGE, applica V Order in fase di scrittura. Le impostazioni a livello di sessione e di scrittura hanno ancora la precedenza, quindi le scritture possono comunque usare L'ordine V anche quando 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, sono 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, consulta Compattazione della tabella.
Controllare direttamente V-Order nelle operazioni di scrittura
Questa sezione usa PySpark per illustrare l'API writer dei DataFrame. Lo stesso modello è disponibile nelle API del dataframe Scala con opzioni equivalenti.
Usare le opzioni a livello di scrittura quando è necessario il controllo per operazione anziché le impostazioni predefinite a livello di sessione o a livello di tabella.
Tutti i comandi di scrittura di Apache Spark ereditano l'impostazione di sessione quando non ne viene eseguito l'override in modo esplicito. Gli esempi seguenti scrivono usando V-Order ereditando 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 >= '2025-01-01' AND end_date <= '2025-01-31'")\
.saveAsTable("myschema.mytable")
V-Order si applica solo ai file interessati dal predicato.
In una sessione in cui spark.sql.parquet.vorder.default non è impostato o impostato su false, i comandi seguenti scrivono usando V-Order:
df_source.write\
.format("delta")\
.mode("overwrite")\
.option("replaceWhere","start_date >= '2025-01-01' AND end_date <= '2025-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()