Optimaliser Delta Lake-tabeller med V-orden

Tabellformatet Lakehouse og Delta Lake er sentrale for Microsoft Fabric. Å holde Delta-tabeller optimalisert er nøkkelen til ytelse og kostnadseffektivitet for analysearbeidsbelastninger.

Denne artikkelen hjelper deg å bestemme når du skal bruke V-order og viser hovedkonfigurasjons- og vedlikeholdsmønstre for Delta-tabeller.

Bruk denne artikkelen til å:

  • Forstå hva V-ordenen endrer seg og når det hjelper.
  • Forstå hvordan Z-ordenen og V-ordenen utfyller hverandre.
  • Velg riktig kontrollnivå: sesjon, tabellegenskap eller skriveoperasjon.
  • Bruk vedlikeholdsmønstre for Delta-tabellen i riktig Spark-kjøretidskontekst.

For veiledning på tvers av arbeidsbelastninger om når V-ordre skal brukes basert på forbruksscenarier, se vedlikehold og optimalisering av kryssarbeidsbelastningstabeller.

Hva er V-orden?

V-order er en skrivetidsoptimalisering for Parquet-filer som kan forbedre nedstrøms spørringsytelse på tvers av Fabric-motorer.

Et overblikk:

  • Hvor det hjelper mest: Lesetunge mønstre som dashbord, interaktiv analyse og gjentatte skanninger.
  • Hvordan det hjelper: Reorganiserer Parquet-oppsettet (for eksempel radgruppefordeling, koding og komprimering) for å forbedre leseeffektiviteten.
  • Typisk avveining: Skrivinger kan ta lengre tid (ofte rundt 15% i gjennomsnitt), mens lesinger kan bli betydelig bedre avhengig av arbeidsmengden.
  • Motorkompatibilitet: Filene forblir åpen kildekode Parquet-kompatible, og Delta-funksjoner som Z-Order forblir kompatible.
  • Omfang: V-rekkefølgen er på filnivå. Delta-operasjoner som komprimering, vakuum og tidsreiser kan brukes med den.

Kontroll-V-ordens skrivinger

V-ordenen brukes for å optimalisere Parquet-filoppsettet for raskere spørringsytelse, spesielt i scenarioer med mye lesing. I Fabric er V-order deaktivert som standard for alle nyopprettede arbeidsområder for å optimalisere ytelsen for skrivetunge dataingeniørarbeidsbelastninger.

V-ordens oppførsel i Apache Spark styres gjennom følgende konfigurasjoner:

Konfigurasjon Standardverdi Bekrivelse
spark.sql.parquet.vorder.default false Kontrollerer V-ordens skriving på øktnivå. Angis som false standard i nye Fabric-arbeidsområder.
TBLPROPERTIES("delta.parquet.vorder.enabled") Fjern Styrer standard V-ordensoppførsel på tabellnivå.
Alternativet DataFrame-skriver: parquet.vorder.enabled Fjern Brukes til å kontrollere V-ordenen på skriveoperasjonsnivå.

Bruk følgende kommandoer for å aktivere eller overstyre V-ordens skriving etter behov for ditt scenario.

V-order er deaktivert som standard i nye Fabric-arbeidsområder (spark.sql.parquet.vorder.default=false) for å forbedre skriveytelsen for inntaks- og transformasjonspipelines.

For lesetunge arbeidsbelastninger som interaktive spørringer eller dashbord, aktiver V-orden ved å sette spark.sql.parquet.vorder.default til true. Du kan også bytte til readHeavyforSpark ressursprofiler som ReadHeavy automatisk aktiverer V-orden for lesefokusert ytelse.

I Fabric runtime 1.3 og senere er innstillingen spark.sql.parquet.vorder.enable fjernet. Fordi V-ordenen kan anvendes automatisk under Delta-optimalisering med OPTIMIZE, trenger du ikke denne eldre innstillingen. Hvis du migrerer fra tidligere runtime-versjoner, fjern denne innstillingen fra koden din.

Sjekk V-orden-konfigurasjon i Apache Spark-sesjonen

Bruk disse kommandoene for å bekrefte den nåværende sesjonsverdien før du endrer den.

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

Deaktiver V-orden-skriving i Apache Spark-sesjonen

Bruk disse kommandoene når arbeidsmengden din er skrivetyngre og du ønsker raskere inntasting eller transformasjonsskriving.

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

Aktiver V-ordensskriving i Apache Spark-sesjon

Når du aktiverer V-orden på sesjonsnivå, bruker alle Parquet-skrivinger i den økten V-orden, inkludert ikke-Delta Parquet-tabeller og Delta-tabeller selv om parquet.vorder.enabled det eksplisitt er satt til false.

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

Kontroll V-orden ved bruk av egenskaper i Delta-tabellen

Denne seksjonen bruker kun Spark SQL fordi tabellegenskaper defineres gjennom SQL DDL og ALTER TABLE setninger.

Bruk tabellegenskaper når du vil ha en standard på tabellnivå som gjelder på tvers av økter.

Aktiver V-ordens tabellegenskap under tabellopprettelse:

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

Når tabellegenskapen settes til true, INSERT, , UPDATEog MERGE bruk V-orden ved skrivetid. Sesjonsnivå- og skrivenivåinnstillinger har fortsatt forrang, så skrivinger kan fortsatt bruke V-orden selv når TBLPROPERTIES er satt til false.

Aktiver eller deaktiver V-orden ved å endre 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");

Etter at du aktiverer eller deaktiverer V-order ved hjelp av tabellegenskaper, er det kun fremtidige skrivinger til tabellen som påvirkes. Parquet-filer beholder rekkefølgen som ble brukt da den ble opprettet. For å endre den nåværende fysiske strukturen for å anvende eller fjerne V-orden, les Table Compaction.

Styring av V-ordenen direkte ved skriveoperasjoner

Denne delen bruker PySpark for å demonstrere DataFrame writer API. Det samme mønsteret er tilgjengelig i Scala DataFrame API-er med tilsvarende alternativer.

Bruk skrivenivå-alternativer når du trenger kontroll per operasjon i stedet for sesjons- eller tabellomfattende standardinnstillinger.

Alle Apache Spark-skrivekommandoer arver sesjonsinnstillingen når de ikke er eksplisitt overstyrt. Følgende eksempler skriver med V-orden ved å arve sesjonskonfigurasjonen.

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-ordenen gjelder kun for filer som påvirkes av predikatet.

I en økt hvor spark.sql.parquet.vorder.default er usatt eller satt til false, skriver følgende kommandoer ved bruk av V-orden:

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