Optimaliseer Delta Lake-tabellen met V-orde

De tabelindeling Lakehouse en Delta Lake staat centraal in Microsoft Fabric. Het optimaliseren van Delta-tabellen is essentieel voor prestaties en kostenefficiëntie voor analyseworkloads.

Dit artikel helpt je beslissen wanneer je V-order moet gebruiken en toont de belangrijkste configuratie- en onderhoudspatronen voor Delta-tabellen.

Gebruik dit artikel om:

  • Begrijp wat V-orde verandert en wanneer het helpt.
  • Begrijp hoe Z-orde en V-orde elkaar aanvullen.
  • Kies het juiste besturingsniveau: sessie, tabeleigenschap of schrijfbewerking.
  • Pas onderhoudspatronen voor Delta-tabellen toe in de juiste Spark-runtimecontext.

Voor cross-workload richtlijnen over wanneer V-order toegepast moet worden op basis van verbruiksscenario's, zie Cross-workload table maintenance and optimization.

Wat is V-orde?

V-order is een schrijftijdoptimalisatie voor Parquet-bestanden die de prestaties van downstream querys over Fabric-engines kan verbeteren.

In één oogopslag:

  • Waar dit het meest helpt: Leesintensieve patronen, zoals dashboarding, interactieve analyses en herhaalde scans.
  • Hoe het helpt: Hiermee wordt de Parquet-indeling (bijvoorbeeld distributie van rijgroepen, codering en compressie) opnieuw ingedeeld om de leesefficiëntie te verbeteren.
  • Typische afweging: Schrijfbewerkingen kunnen langer duren (vaak ongeveer 15% gemiddeld), terwijl leesbewerkingen aanzienlijk kunnen worden verbeterd, afhankelijk van de werkbelasting.
  • Compatibiliteit van engine: Bestanden blijven opensource Parquet-compatibel en Delta-functies zoals Z-Order blijven compatibel.
  • Scope: V-orde is op bestandsniveau. Deltabewerkingen zoals compressie, vacuüm en tijdreizen kunnen ermee worden gebruikt.

Schrijfopdrachten van Control V-order

V-order wordt gebruikt om de Parquet-bestandsindeling te optimaliseren voor snellere queryprestaties, vooral in leesintensieve situaties. In Fabric is V-order standaard uitgeschakeld voor alle nieuw aangemaakte werkruimtes om de prestaties te optimaliseren voor schrijfintensieve data-engineeringwerklasten.

V-orde gedrag in Apache Spark wordt geregeld via de volgende configuraties:

Configuratie Standaardwaarde Beschrijving
spark.sql.parquet.vorder.default false Regelt het schrijven op sessieniveau V-orde. Ingesteld op false standaard in nieuwe Fabric-werkruimten.
TBLPROPERTIES("delta.parquet.vorder.enabled") Ongedefinieerd Regelt standaard V-orde gedrag op tafelniveau.
DataFrame Writer-optie: parquet.vorder.enabled Ongedefinieerd Gebruikt om V-orde op schrijfniveau te besturen.

Gebruik de volgende commando's om V-order schrijfopdrachten in te schakelen of te overschrijven indien nodig voor jouw situatie.

V-order is standaard uitgeschakeld in nieuwe Fabric-werkruimtes (spark.sql.parquet.vorder.default=false) om de schrijfprestaties voor ingestie- en transformatiepijplijnen te verbeteren.

Voor leesintensieve werklasten zoals interactieve queries of dashboarding, schakel V-order in door in te stellen spark.sql.parquet.vorder.default op true. Je kunt ook overschakelen naar readHeavyforSpark of ReadHeavy resource profiles, die automatisch V-order inschakelen voor leesgerichte prestaties.

In Fabric Runtime 1.3 en hoger wordt de spark.sql.parquet.vorder.enable instelling verwijderd. Omdat V-order automatisch kan worden toegepast tijdens Delta-optimalisatie met OPTIMIZE, heb je deze oudere instelling niet nodig. Als u migreert van eerdere runtimeversies, verwijdert u deze instelling uit uw code.

Controleer V-order configuratie in Apache Spark sessie

Gebruik deze opdrachten om de huidige sessiewaarde te bevestigen voordat u deze wijzigt.

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

Schakel V-order schrijven uit in Apache Spark-sessie

Gebruik deze commando's wanneer uw werkbelasting schrijfintensief is en u voor snellere opname van schrijfbewerkingen of transformaties wilt zorgen.

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

Schakel V-order schrijven in in Apache Spark-sessie in

Wanneer je V-order inschakelt op sessieniveau, gebruiken alle Parquet-schrijfopdrachten in die sessie V-order, inclusief niet-Delta Parquet-tabellen en Delta-tabellen, zelfs als parquet.vorder.enabled expliciet is ingesteld op false.

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

Besturingsorde V-orde met behulp van Delta-tabeleigenschappen

In deze sectie wordt alleen Spark SQL gebruikt omdat tabeleigenschappen worden gedefinieerd via SQL DDL en ALTER TABLE instructies.

Gebruik tabeleigenschappen als u een standaardinstelling op tabelniveau wilt die van toepassing is op sessies.

Schakel de V-orde tabeleigenschap in tijdens het aanmaken van tabel:

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

Wanneer de tabeleigenschap is ingesteld op true, INSERT, , UPDATEen MERGE V-orde wordt toegepast tijdens schrijftijd. Sessie- en schrijfniveau-instellingen hebben nog steeds voorrang, dus schrijfopdrachten kunnen V-volgorde gebruiken, zelfs als TBLPROPERTIES deze is ingesteld op false.

Schakel V-orde in of uit door de tabeleigenschap te wijzigen:

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

Nadat je V-order hebt ingeschakeld of uitgeschakeld met tabeleigenschappen, worden alleen toekomstige schrijfopdrachten naar de tabel beïnvloed. Parquet-bestanden behouden de volgorde die wordt gebruikt toen deze werd gemaakt. Om de huidige fysieke structuur te wijzigen om V-orde toe te passen of te verwijderen, lees Table Compaction.

V-order direct aansturen bij schrijfbewerkingen

In deze sectie wordt PySpark gebruikt om de DataFrame Writer-API te demonstreren. Hetzelfde patroon is beschikbaar in Scala DataFrame-API's met equivalente opties.

Gebruik opties op schrijfniveau wanneer u beheer per bewerking nodig hebt in plaats van standaardinstellingen voor de hele sessie of tabel.

Alle schrijfbewerkingen in Apache Spark nemen de sessie-instelling over, tenzij deze expliciet wordt overschreven. De volgende voorbeelden schrijven met V-orde door de sessieconfiguratie te erven.

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-volgorde geldt alleen voor bestanden die door het predicaat worden beïnvloed.

In een sessie waarbij spark.sql.parquet.vorder.default is ongesteld of ingesteld op false, schrijven de volgende commando's met V-orde:

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