Optimera Delta Lake-tabeller med V-ordning

Tabellformatet Lakehouse och Delta Lake är centrala för Microsoft Fabric. Att hålla Delta-tabeller optimerade är nyckeln till prestanda och kostnadseffektivitet för analysarbetsbelastningar.

Den här artikeln hjälper dig att avgöra när du ska använda V-order och visar de viktigaste konfigurations- och underhållsmönstren för Delta-tabeller.

Använd den här artikeln för att:

  • Förstå vad V-ordningen ändrar och när det hjälper.
  • Förstå hur Z-ordning och V-ordning kompletterar varandra.
  • Välj rätt kontrollnivå: session, tabellegenskap eller skrivåtgärd.
  • Använd underhållsmönster för deltatabeller i rätt Spark-körmiljö.

För vägledning över arbetsbelastningar om när V-order ska tillämpas baserat på förbrukningsscenarier, se Cross-workload table maintenance and optimization.

Vad är V-ordning?

V-order är en skrivtidsoptimering för Parquet-filer som kan förbättra prestandan för nedströms frågor över Fabric-motorer.

Snabbt:

  • Där det hjälper mest: Läsintensiva arbetsmönster såsom instrumentpanelskonstruktion, interaktiv analys och upprepade genomsökningar.
  • Så här hjälper det: Omorganiserar Parquet-layouten (till exempel radgruppsdistribution, kodning och komprimering) för att förbättra läseffektiviteten.
  • Typisk kompromiss: Skrivningar kan ta längre tid (ofta cirka 15% i genomsnitt), medan läsningar kan förbättras avsevärt beroende på arbetsbelastning.
  • Motorkompatibilitet: Filerna är fortfarande Parquet-kompatibla med öppen källkod och Delta-funktioner som Z-Order förblir kompatibla.
  • Omfattning: V-ordningen är på filnivå. Deltaåtgärder som komprimering, vakuum och tidsresor kan användas med den.

Kontroll-V-ordningsskrivningar

V-ordning används för att optimera Parquet-fillayouten för snabbare frågeprestanda, särskilt i läsintensiva scenarier. I Fabric är V-order inaktiverad som standard för alla nyskapade arbetsytor för att optimera prestandan för skrivintensiva dataingenjörsarbetsbelastningar.

V-ordningens beteende i Apache Spark styrs genom följande konfigurationer:

Konfiguration Standardvärde beskrivning
spark.sql.parquet.vorder.default false Styr sessionsnivå V-ordningsskrivande. Ange till false som standard i nya Fabric-arbetsytor.
TBLPROPERTIES("delta.parquet.vorder.enabled") Inaktivera Styr standardbeteendet för V-ordning på tabellnivå.
DataFrame-skrivaralternativ: parquet.vorder.enabled Inaktivera Används för att styra V-ordning på skrivoperationsnivå.

Använd följande kommandon för att aktivera eller åsidosätta V-order-skrivningar vid behov för ditt scenario.

V-order är inaktiverad som standard i nya Fabric-arbetsytor (spark.sql.parquet.vorder.default=false) för att förbättra skrivprestandan för inmatnings- och transformationspipelines.

För lästunga arbetsbelastningar som interaktiva frågor eller dashboarding, aktivera V-order genom att sätta spark.sql.parquet.vorder.default till true. Du kan också byta till readHeavyforSpark eller ReadHeavy resursprofiler, som automatiskt aktiverar V-ordning för läsfokuserad prestanda.

I Fabric Runtime 1.3 och senare spark.sql.parquet.vorder.enable tas inställningen bort. Eftersom V-ordning kan tillämpas automatiskt under Delta-optimering med OPTIMIZE, behöver du inte denna äldre inställning. Om du migrerar från tidigare runtime-miljöer, ta bort den här inställningen från koden.

Kontrollera V-ordningskonfiguration i Apache Spark-sessionen

Använd dessa kommandon för att bekräfta det aktuella sessionsvärdet innan du ändrar det.

%%sql 
SET spark.sql.parquet.vorder.default 

Inaktivera V-order-skrivning i Apache Spark-sessionen

Använd dessa kommandon när din arbetsbelastning är skrivintensiv och du vill ha snabbare inmatning eller transformeringsskrivningar.

%%sql 
SET spark.sql.parquet.vorder.default=FALSE 

Aktivera V-ordningsskrivning i Apache Spark-sessionen

När du aktiverar V-ordning på sessionsnivå använder alla Parquet-skrivningar i den sessionen V-ordning, inklusive icke-Delta Parquet-tabeller och Delta-tabeller även om parquet.vorder.enabled det uttryckligen är inställt på false.

%%sql 
SET spark.sql.parquet.vorder.default=TRUE 

Styrordning V-ordning med hjälp av Delta-tabellens egenskaper

Det här avsnittet använder Endast Spark SQL eftersom tabellegenskaper definieras via SQL DDL och ALTER TABLE -instruktioner.

Använd tabellegenskaper när du vill ha ett standardvärde på tabellnivå som gäller för flera sessioner.

Aktivera V-ordningens tabellegenskap vid tabellskapandet:

%%sql 
CREATE TABLE person (id INT, name STRING, age INT) USING parquet TBLPROPERTIES("delta.parquet.vorder.enabled" = "true");

När tabellegenskapen är satt till true, INSERT, , UPDATEoch MERGE applicera V-ordning vid skrivtid. Sessions- och skrivnivåinställningar har fortfarande företräde, så skrivningar kan fortfarande använda V-ordning även när TBLPROPERTIES är satt till false.

Aktivera eller inaktivera V-ordning genom att ändra tabellegenskapen:

%%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");

Efter att du aktiverat eller inaktiverat V-order med tabellegenskaper påverkas endast framtida skrivningar till tabellen. Parquet-filer behåller den ordning som användes när de skapades. För att ändra den nuvarande fysiska strukturen för att tillämpa eller ta bort V-ordning, läs Table Compaction.

Styrning av V-ordning direkt vid skrivoperationer

I det här avsnittet används PySpark för att demonstrera DataFrame-skrivar-API:et. Samma mönster är tillgängligt i Scala DataFrame-API:er med motsvarande alternativ.

Använd alternativ på skrivnivå när du behöver kontroll per åtgärd i stället för standardinställningar för hela sessionen eller hela tabellen.

Alla Apache Spark-skrivkommandon ärver sessionsinställningen när de inte uttryckligen åsidosättas. Följande exempel skriver med V-ordning genom att ärva sessionskonfigurationen.

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-ordningen gäller endast för filer som påverkas av predikatet.

I en session där spark.sql.parquet.vorder.default är osatt eller satt till false, skriver följande kommandon med V-ordning:

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()