Delen via


Optimalisatie van Delta Lake-tabellen en V-order

De Tabelindeling Lakehouse en Delta Lake staan centraal in Microsoft Fabric, omdat tabellen zijn geoptimaliseerd voor analyse een belangrijke vereiste is. In deze handleiding worden concepten, configuraties en configuraties beschreven voor optimalisatie van Delta Lake-tabellen en hoe u deze toepast op de meest voorkomende big data-gebruikspatronen.

Wat is V-Order?

V-Order is een optimalisatie van schrijftijd voor de Parquet-bestandsindeling waarmee razendsnelle leesbewerkingen mogelijk zijn onder de Microsoft Fabric-rekenengines, zoals Power BI, SQL, Spark en andere.

Power BI- en SQL-engines maken gebruik van Microsoft Verti-Scan-technologie en V-Geordende Parquet-bestanden om in-memory te bereiken, zoals tijden voor gegevenstoegang. Spark en andere niet-Verti-Scan-rekenprogramma's profiteren ook van de V-Geordende bestanden met gemiddeld 10% snellere leestijden, met sommige scenario's tot 50%.

V-Order werkt door speciale sortering, rijgroepdistributie, woordenlijstcodering en compressie toe te passen op Parquet-bestanden, waardoor er minder netwerk-, schijf- en CPU-resources in rekenprogramma's nodig zijn om deze te lezen, waardoor kostenefficiëntie en prestaties worden geboden. Sorteren in V-volgorde heeft een invloed van 15% op de gemiddelde schrijftijden, maar biedt maximaal 50% meer compressie.

Het is 100% opensource parquet-indeling compatibel; alle parquet-engines kunnen het lezen als gewone Parquet-bestanden. Delta-tabellen zijn efficiënter dan ooit; functies zoals Z-Order zijn compatibel met V-Order. Tabeleigenschappen en optimalisatieopdrachten kunnen worden gebruikt voor het besturingselement V-Order op de partities.

V-Order wordt toegepast op parquet-bestandsniveau. Delta-tabellen en de kenmerken, zoals Z-Order, compressie, vacuüm, tijdreizen, enz. zijn orthogonaal naar V-Order, als zodanig compatibel en kunnen samen worden gebruikt voor extra voordelen.

Schrijfbewerkingen in V-volgorde beheren

V-Order is standaard ingeschakeld in Microsoft Fabric en in Apache Spark wordt deze beheerd door de volgende configuraties.

Configuratie Default value Beschrijving
spark.sql.parquet.vorder.enabled true Bepaalt het schrijven van V-volgorde op sessieniveau.
TBLPROPERTIES("delta.parquet.vorder.enabled") false Standaardmodus V-order in tabellen
Optie dataframe writer: parquet.vorder.enabled Unset Schrijfbewerkingen in V-volgorde beheren met dataframe writer

Gebruik de volgende opdrachten om het gebruik van V-Order-schrijfbewerkingen te beheren.

Configuratie van V-volgorde controleren in Apache Spark-sessie

%%sql 
SET spark.sql.parquet.vorder.enabled 

V-order schrijven uitschakelen in Apache Spark-sessie

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

V-order schrijven inSchakelen in Apache Spark-sessie

Belangrijk

Wanneer deze optie is ingeschakeld op sessieniveau. Alle parquet-schrijfbewerkingen worden gemaakt met V-Order ingeschakeld. Dit omvat niet-Delta Parquet-tabellen en Delta-tabellen waarbij de parquet.vorder.enabled tabeleigenschap is ingesteld op of true false.

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

V-volgorde beheren met deltatabeleigenschappen

Schakel de tabeleigenschap V-order in tijdens het maken van de tabel:

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

Belangrijk

Wanneer de tabeleigenschap is ingesteld op true, gedragen de opdrachten INSERT, UPDATE en MERGE zich zoals verwacht en worden de optimalisatie van schrijftijd uitgevoerd. Als de configuratie van de V-Order-sessie is ingesteld op waar of als spark.write dit inschakelt, worden de schrijfbewerkingen V-Order, zelfs als de TBLPROPERTIES is ingesteld op false.

Schakel V-Order 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 u V-Order met tabeleigenschappen hebt ingeschakeld of uitgeschakeld, worden alleen toekomstige schrijfbewerkingen naar de tabel beïnvloed. Parquet-bestanden behouden de volgorde die wordt gebruikt toen deze werd gemaakt. Als u de huidige fysieke structuur wilt wijzigen om V-Volgorde toe te passen of te verwijderen, leest u de sectie 'V-Volgorde beheren bij het optimaliseren van een tabel' hieronder.

V-order rechtstreeks beheren voor schrijfbewerkingen

Alle Apache Spark-schrijfopdrachten nemen de sessie-instelling over als deze niet expliciet is. Alle volgende opdrachten schrijven met V-Order door impliciet de sessieconfiguratie over te nemen.

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 >= '2017-01-01' AND end_date <= '2017-01-31'")\
  .saveAsTable("myschema.mytable") 

Belangrijk

V-Order is alleen van toepassing op bestanden die worden beïnvloed door het predicaat.

In een sessie waarbij spark.sql.parquet.vorder.enabled de set is uitgeschakeld of is ingesteld op false, worden de volgende opdrachten geschreven met behulp van V-Order:

df_source.write\
  .format("delta")\
  .mode("overwrite")\
  .option("replaceWhere","start_date >= '2017-01-01' AND end_date <= '2017-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()

Wat is Schrijfbewerking optimaliseren?

Analytische workloads op big data-verwerkingsengines zoals Apache Spark presteren het meest efficiënt wanneer u gestandaardiseerde grotere bestandsgrootten gebruikt. De relatie tussen de bestandsgrootte, het aantal bestanden, het aantal Spark-werkrollen en de configuraties, speelt een belangrijke rol bij de prestaties. Het opnemen van gegevens in Data Lake-tabellen kan het overgenomen kenmerk hebben van het voortdurend schrijven van veel kleine bestanden; dit scenario wordt meestal het 'probleem met kleine bestanden' genoemd.

Write optimaliseren is een Delta Lake in Microsoft Fabric en de Azure Synapse Analytics-functie in de Apache Spark-engine die het aantal geschreven bestanden vermindert en is gericht op het vergroten van de afzonderlijke bestandsgrootte van de geschreven gegevens. De grootte van het doelbestand kan worden gewijzigd per workload met behulp van configuraties.

De functie is standaard ingeschakeld in Microsoft Fabric Runtime voor Apache Spark. Lees het artikel De noodzaak voor het optimaliseren van schrijfbewerkingen op Apache Spark voor meer informatie over scenario's voor het optimaliseren van schrijfgebruik.

Optimalisatie van samenvoegen

Met de opdracht Delta Lake MERGE kunnen gebruikers een deltatabel bijwerken met geavanceerde voorwaarden. Met de opdracht MERGE kunt u gegevens uit een brontabel, weergave of DataFrame bijwerken in een doeltabel. Het huidige algoritme in de opensource-distributie van Delta Lake is echter niet volledig geoptimaliseerd voor het verwerken van ongewijzigde rijen. Het Microsoft Spark Delta-team heeft een aangepaste optimalisatie van Low Shuffle Merge geïmplementeerd. Niet-aangepaste rijen worden uitgesloten van een dure shuffling-bewerking die nodig is voor het bijwerken van overeenkomende rijen.

De implementatie wordt beheerd door de spark.microsoft.delta.merge.lowShuffle.enabled configuratie, die standaard is ingeschakeld in de runtime. Er zijn geen codewijzigingen vereist en is volledig compatibel met de opensource-distributie van Delta Lake. Lees het artikel Low Shuffle Merge Optimization in Delta-tabellen voor meer informatie over gebruiksscenario's met lage shuffle-samenvoeging.

Onderhoud van Delta-tabellen

Naarmate deltatabellen veranderen, verminderen de prestaties en de efficiëntie van de opslagkosten om de volgende redenen:

  • Nieuwe gegevens die aan de tabel worden toegevoegd, kunnen scheeftrekken van gegevens.
  • Batch- en streaminggegevensopnamesnelheden kunnen veel kleine bestanden opleveren.
  • Bewerkingen voor bijwerken en verwijderen maken uiteindelijk leesoverhead; Parquet-bestanden zijn standaard onveranderbaar, dus Delta-tabellen voegen nieuwe Parquet-bestanden toe met de wijzigingenset, waardoor de problemen die door de eerste twee items worden opgelegd, worden versterkt.
  • Er zijn geen gegevensbestanden en logboekbestanden meer nodig die beschikbaar zijn in de opslag.

Als u de tabellen in de beste staat wilt houden voor de beste prestaties, voert u bin-compactie- en vacuümbewerkingen uit in de Delta-tabellen. Bin-compactie wordt bereikt met de opdracht OPTIMIZE . Hiermee worden alle wijzigingen samengevoegd in grotere, geconsolideerde Parquet-bestanden. Het opschonen van opslagdeductie wordt bereikt door de opdracht VACUUM .

De tabelonderhoudsopdrachten OPTIMALISEREN en VACUUM kunnen worden gebruikt in notebooks en Spark-taakdefinities en vervolgens ingedeeld met behulp van platformmogelijkheden. Lakehouse in Fabric biedt een functionaliteit om de gebruikersinterface te gebruiken om ad-hoc tabelonderhoud uit te voeren, zoals wordt uitgelegd in het onderhoudsartikel van de Delta Lake-tabel.

Belangrijk

Het correct ontwerpen van de fysieke tabelstructuur, op basis van de opnamefrequentie en de verwachte leespatronen, is waarschijnlijk belangrijker dan het uitvoeren van de optimalisatieopdrachten die in deze sectie worden beschreven.

V-volgorde beheren bij het optimaliseren van een tabel

De volgende opdrachtstructuren bin-compact en herschrijven alle betrokken bestanden met behulp van V-Order, onafhankelijk van de TBLPROPERTIES-instelling of sessieconfiguratie-instelling:

%%sql 
OPTIMIZE <table|fileOrFolderPath> VORDER;

OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> VORDER;

OPTIMIZE <table|fileOrFolderPath> WHERE <predicate> [ZORDER  BY (col_name1, col_name2, ...)] VORDER;

Wanneer ZORDER en VORDER samen worden gebruikt, voert Apache Spark bin-compactie, ZORDER, VORDER opeenvolgend uit.

De volgende opdrachten bin-compact en herschrijven alle betrokken bestanden met behulp van de TBLPROPERTIES-instelling. Als TBLPROPERTIES is ingesteld op V-Order, worden alle betrokken bestanden geschreven als V-Order. Als TBLPROPERTIES niet is ingesteld of is ingesteld op onwaar op V-Order, neemt deze de sessie-instelling over; Als u V-Order uit de tabel wilt verwijderen, stelt u de sessieconfiguratie in op false.

%%sql 
OPTIMIZE <table|fileOrFolderPath>;

OPTIMIZE <table|fileOrFolderPath> WHERE predicate;

OPTIMIZE <table|fileOrFolderPath> WHERE predicate [ZORDER BY (col_name1, col_name2, ...)];