Optimer Delta Lake-tabeller med V-orden

Lakehouse og Delta Lake tabelformatet er centrale for Microsoft Fabric. At holde Delta-tabeller optimeret er nøglen til ydeevne og omkostningseffektivitet for analysearbejdsbyrder.

Denne artikel hjælper dig med at beslutte, hvornår du skal bruge V-orden, og viser de vigtigste konfigurations- og vedligeholdelsesmønstre for Delta-tabeller.

Brug denne artikel til at:

  • Forstå, hvad V-ordenen ændrer, og hvornår det hjælper.
  • Forstå, hvordan Z-ordenen og V-ordenen supplerer hinanden.
  • Vælg det rigtige kontrolniveau: session, tabelegenskab eller skriveoperation.
  • Anvend vedligeholdelsesmønstre for Delta-tabellen i den rigtige Spark-runtime-kontekst.

For vejledning på tværs af arbejdsbelastninger om, hvornår V-ordre skal anvendes baseret på forbrugsscenarier, se Cross-workload table maintenance and optimization.

Hvad er V-orden?

V-order er en skrivetidsoptimering for Parquet-filer, som kan forbedre downstream forespørgselsydelse på tværs af Fabric-motorer.

Et overblik:

  • Hvor det hjælper mest: Læse-tunge mønstre som dashboarding, interaktiv analyse og gentagne scanninger.
  • Hvordan det hjælper: Reorganiserer Parquet-layoutet (for eksempel rækkegruppefordeling, kodning og komprimering) for at forbedre læseeffektiviteten.
  • Typisk afvejning: Skrivninger kan tage længere tid (ofte omkring 15% i gennemsnit), mens læsninger kan forbedres betydeligt afhængigt af arbejdsbyrden.
  • Motorkompatibilitet: Filer forbliver open source Parquet-kompatible, og Delta-funktioner som Z-Order forbliver kompatible.
  • Omfang: V-ordenen er på filniveau. Delta-operationer som kompaktion, vakuum og tidsrejser kan bruges med den.

Kontrol-V-ordensskrivninger

V-orden bruges til at optimere Parquet-fillayoutet for hurtigere forespørgselsydelse, især i læseintensive scenarier. I Fabric er V-order som standard deaktiveret for alle nyoprettede arbejdsområder for at optimere ydeevnen til skrivetunge dataingeniørarbejdsbyrder.

V-ordens adfærd i Apache Spark styres gennem følgende konfigurationer:

Konfiguration Standardværdi Beskrivelse
spark.sql.parquet.vorder.default false Styrer sessionsniveau V-ordens skrivning. Indstillet til false som standard i nye Fabric-arbejdsområder.
TBLPROPERTIES("delta.parquet.vorder.enabled") Fjern indstillingen Styrer standard V-ordensadfærd på tabelniveau.
Indstillingen DataFrame-skriver: parquet.vorder.enabled Fjern indstillingen Bruges til at kontrollere V-ordenen på skriveoperationsniveau.

Brug følgende kommandoer til at aktivere eller overskrive V-ordens skrivninger efter behov i dit scenarie.

V-order er deaktiveret som standard i nye Fabric-arbejdsområder (spark.sql.parquet.vorder.default=false) for at forbedre skriveydelsen for indlæsnings- og transformationspipelines.

For læseintensive arbejdsbelastninger som interaktive forespørgsler eller dashboarding, aktiver V-order ved at sætte spark.sql.parquet.vorder.default til true. Du kan også skifte til readHeavyforSpark ressourceprofiler ReadHeavy , som automatisk aktiverer V-orden for læsefokuseret ydeevne.

I Fabric runtime 1.3 og senere er indstillingen spark.sql.parquet.vorder.enable fjernet. Fordi V-ordenen kan anvendes automatisk under Delta-optimering med OPTIMIZE, behøver du ikke denne ældre indstilling. Hvis du migrerer fra tidligere runtime-versioner, skal du fjerne denne indstilling fra din kode.

Tjek V-ordenskonfiguration i Apache Spark-sessionen

Brug disse kommandoer til at bekræfte den aktuelle sessionsværdi, før du ændrer den.

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

Deaktiver V-ordensskrivning i Apache Spark-sessionen

Brug disse kommandoer, når din arbejdsbyrde er skrivetynget, og du ønsker hurtigere indtastning eller transformationsskrivninger.

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

Aktiver V-order skrivning i Apache Spark-sessionen

Når du aktiverer V-orden på sessionsniveau, bruger alle Parquet-skrivninger i den session V-orden, inklusive ikke-Delta Parquet-tabeller og Delta-tabeller, selvom parquet.vorder.enabled det eksplicit er sat til false.

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

Kontrol-V-orden ved brug af Delta-tabels egenskaber

Denne sektion bruger kun Spark SQL, fordi tabelegenskaber defineres gennem SQL DDL og ALTER TABLE statements.

Brug tabelegenskaber, når du vil have en tabelniveau-standard, der gælder på tværs af sessioner.

Aktivér V-ordens tabelegenskab under tabeloprettelse:

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

Når tabelegenskaben sættes til true, INSERT, , UPDATEog MERGE anvender V-orden ved skrivetidspunktet. Sessions- og skriveniveau-indstillinger har stadig forrang, så skrivninger kan stadig bruge V-orden, selv når TBLPROPERTIES er sat til false.

Aktivér eller deaktiver V-order ved at ændre tabelegenskaben:

%%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 du har aktiveret eller deaktiveret V-order ved hjælp af tabelegenskaber, påvirkes kun fremtidige skrivninger til tabellen. Parquetfiler bevarer den rækkefølge, der blev brugt, da den blev oprettet. For at ændre den nuværende fysiske struktur for at anvende eller fjerne V-orden, læs Table Compaction.

Styring af V-ordenen direkte ved skriveoperationer

Denne sektion bruger PySpark til at demonstrere DataFrame writer API'en. Det samme mønster findes i Scala DataFrame API'er med tilsvarende muligheder.

Brug skriveniveau-muligheder, når du har brug for kontrol pr. operation, i stedet for sessions- eller tabel-dækkende standardindstillinger.

Alle Apache Spark-skrivekommandoer arver sessionsindstillingen, når de ikke eksplicit overskrives. Følgende eksempler skriver ved hjælp af V-orden ved at arve 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-ordenen gælder kun for filer, der påvirkes af prædikatet.

I en session hvor spark.sql.parquet.vorder.default er unset eller sat til false, skriver følgende kommandoer ved hjælp af 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()