Optimering av låg blandningssammanslagning i Delta-tabeller

Med kommandot Delta Lake MERGE kan användare uppdatera en deltatabell med avancerade villkor. Den kan uppdatera data från en källtabell, vy eller DataFrame till en måltabell med hjälp av KOMMANDOT MERGE. Den aktuella algoritmen är dock inte helt optimerad för hantering av oförändrade rader. Med optimering av låg blandningssammanfogning undantas oförändrade rader från en dyr blandningsåtgärd som behövs för att uppdatera matchade rader.

Därför behöver vi låg blandningssammanslagning

För närvarande utförs MERGE-åtgärden av två Kopplingskörningar. Den första kopplingen använder hela måltabellen och källdata för att hitta en lista över rörda filer i måltabellen, inklusive matchade rader. Därefter utför den den andra kopplingsläsningen endast de vidrörda filerna och källdata för att göra faktiska tabelluppdateringar. Även om den första kopplingen är att minska mängden data för den andra kopplingen kan det fortfarande finnas ett stort antal oförändrade rader i rörda filer. Den första kopplingsfrågan är lättare eftersom den bara läser kolumner i det angivna matchningsvillkoret. Den andra för tabelluppdateringen måste läsa in alla kolumner, vilket medför en dyr blandningsprocess.

Med optimering av låg blandningssammanfogning behåller Delta det matchade radresultatet från den första kopplingen tillfälligt och använder det för den andra kopplingen. Baserat på resultatet undantas oförändrade rader från den tunga blandningsprocessen. Det skulle finnas två separata skrivjobb för matchade rader och oförändrade rader, vilket kan resultera i 2x antal utdatafiler jämfört med det tidigare beteendet. Den förväntade prestandavinsten uppväger dock det möjliga problemet med små filer.

Tillgänglighet

Kommentar

  • Low Shuffle Merge är tillgänglig som en förhandsversionsfunktion.

Den är tillgänglig i Synapse-pooler för Apache Spark-versionerna 3.2 och 3.3.

Version: Tillgänglighet Standardvärde
Delta 0.6 / Spark 2.4 Inga -
Delta 1.2 / Spark 3.2 Ja false
Delta 2.2 / Spark 3.3 Ja true

Fördelar med låg blandningssammanslagning

  • Oförändrade rader i rörda filer hanteras separat och går inte igenom den faktiska MERGE-åtgärden. Den kan spara den övergripande körningstiden för MERGE och beräkningsresurserna. Vinsten blir större när många rader kopieras och bara några rader uppdateras.
  • Radordningar bevaras för oförändrade rader. Därför kan utdatafilerna för oförändrade rader fortfarande vara effektiva för data som hoppar över om filen har sorterats eller Z-ORDERED.
  • Det skulle finnas små omkostnader även för det värsta fallet när MERGE-villkoret matchar alla rader i rörda filer.

Så här aktiverar och inaktiverar du låg blandningssammanslagning

När konfigurationen har angetts för poolen eller sessionen använder alla Spark-skrivmönster funktionerna.

Om du vill använda optimering av låg blandningssammanfogning aktiverar du den med hjälp av följande konfiguration:

  1. Scala och PySpark
spark.conf.set("spark.microsoft.delta.merge.lowShuffle.enabled", "true")
  1. Spark SQL
SET `spark.microsoft.delta.merge.lowShuffle.enabled` = true

Om du vill kontrollera det aktuella konfigurationsvärdet använder du kommandot enligt nedan:

  1. Scala och PySpark
spark.conf.get("spark.microsoft.delta.merge.lowShuffle.enabled")
  1. Spark SQL
SET `spark.microsoft.delta.merge.lowShuffle.enabled`

Om du vill inaktivera funktionen ändrar du följande konfiguration enligt nedan:

  1. Scala och PySpark
spark.conf.set("spark.microsoft.delta.merge.lowShuffle.enabled", "false")
  1. Spark SQL
SET `spark.microsoft.delta.merge.lowShuffle.enabled` = false