Optimera Delta Lake-tabeller med V-order

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 bestämma 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-Order ändrar och när det hjälper.
  • Förstå hur Z-Order och V-Order 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ö.

Vägledning för flera arbetsbelastningar om när du ska tillämpa V-order baserat på förbrukningsscenarier finns i Underhåll och optimering av tabeller mellan arbetsbelastningar.

Vad är V-Order?

V-Order är en skrivtidsoptimering för Parquet-filer som kan förbättra frågeprestanda nedströms inom 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-Order är på filnivå. Deltaåtgärder som komprimering, vakuum och tidsresor kan användas med den.

Kontrollera V-order-skrivningarna

V-Order används för att optimera Parquet-fillayouten för snabbare frågeprestanda, särskilt i läsintensiva scenarier. I Microsoft Fabric är V-Order inaktiverad som standard för alla nyskapade arbetsytor för att optimera prestanda för skrivintensiva dataintensiva arbetsbelastningar.

V-Order-beteendet i Apache Spark styrs genom följande konfigurationer:

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

Använd följande kommandon för att aktivera eller åsidosätta V-Order-skrivningar efter 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 skrivprestanda för inmatning och transformerings-pipelines.

För arbetsbelastningar med högt läsbehov, som interaktiva frågeställningar eller instrumentpanelshantering, aktiverar du V-Order genom att ställa in spark.sql.parquet.vorder.default till true. Du kan också växla till readHeavyforSpark eller ReadHeavy resursprofiler, som automatiskt aktiverar V-Order för läsfokuserad prestanda.

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

Kontrollera V-Order-konfigurationen 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-session

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-Order-skrivning i Apache Spark-session

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

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

Kontrollera V-order med hjälp av deltatabellegenskaper

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 tabellegenskapen V-Order när tabellen skapas:

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

När tabellegenskapen är inställd på true, INSERT, UPDATEoch MERGE tillämpar V-Order vid skrivtillfället. Inställningar på sessions- och skrivnivå har fortfarande företräde, så skrivningar kan fortfarande använda V-Order även när TBLPROPERTIES är inställt på false.

Aktivera eller inaktivera V-order 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");

När du har aktiverat eller inaktiverat V-Order med hjälp av tabellegenskaper påverkas endast framtida skrivningar till tabellen. Parquet-filer behåller den ordning som användes när de skapades. Om du vill ändra den aktuella fysiska strukturen för att tillämpa eller ta bort V-order läser du Tabellkomprimering.

Styra V-order direkt vid skrivåtgärder

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

I en session där spark.sql.parquet.vorder.default inte är inställt eller är inställt på false skriver följande kommandon med 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()