Sdílet prostřednictvím


Optimalizace sloučení s nízkými shufflemi v tabulkách Delta

Příkaz Delta Lake MERGE umožňuje uživatelům aktualizovat tabulku Delta s rozšířenými podmínkami. Pomocí příkazu MERGE může aktualizovat data ze zdrojové tabulky, zobrazení nebo datového rámce do cílové tabulky. Aktuální algoritmus ale není plně optimalizovaný pro zpracování neupravených řádků. Při optimalizaci sloučení s nízkým shufflem jsou neupravené řádky vyloučeny z nákladné operace náhodného prohazování, která je nutná pro aktualizaci odpovídajících řádků.

Proč potřebujeme sloučení s nízkým shufflem

Operace MERGE se v současné době provádí dvěma spuštěními spojení. První spojení používá celou cílovou tabulku a zdrojová data k vyhledání seznamu dotykových souborů cílové tabulky včetně všech odpovídajících řádků. Potom provede druhé spojení čtení pouze těch dotkovaných souborů a zdrojových dat, aby se provedla skutečná aktualizace tabulky. I když první spojení snižuje množství dat pro druhé spojení, stále může existovat velký počet neupravených řádků v dotekovaných souborech. První dotaz spojení je světlejší, protože čte pouze sloupce v dané shodě podmínky. Druhá aktualizace tabulky musí načíst všechny sloupce, což způsobuje nákladný proces náhodného náhodného prohazování.

Díky optimalizaci sloučení nízkého náhodného náhodného prohazování udržuje Delta výsledek odpovídajícího řádku z prvního spojení dočasně a využívá ho pro druhé spojení. Na základě výsledku vyloučí neupravené řádky z těžkého procesu náhodného náhodného prohazování. Pro odpovídající řádky a neupravené řádky by byly dvě samostatné úlohy zápisu, což by mohlo vést k 2x počtu výstupních souborů v porovnání s předchozím chováním. Očekávaný výkon však převáží možný problém s malými soubory.

Dostupnost

Poznámka:

  • Funkce Low Shuffle Merge je k dispozici jako funkce Preview.

Je k dispozici ve fondech Synapse pro Apache Spark verze 3.2 a 3.3.

Verze Dostupnost Výchozí
Delta 0.6 / Spark 2.4 No -
Delta 1.2 / Spark 3.2 Ano false (nepravda)
Delta 2.2 / Spark 3.3 Ano pravda

Výhody nízkého shuffle Merge

  • Neupravené řádky v dotkovaných souborech se zpracovávají samostatně a neprochází skutečnou operací MERGE. Může ušetřit celkovou dobu provádění sloučení a výpočetní prostředky. Získání by bylo větší, když se zkopíruje mnoho řádků a aktualizuje se jenom několik řádků.
  • Pořadí řádků se zachová pro neupravené řádky. Výstupní soubory neupravených řádků by proto mohly být stále efektivní pro přeskočení dat, pokud byl soubor seřazený nebo Z-ORDERED.
  • V nejhorším případě by byla režijní režie i v případě, že podmínka MERGE odpovídá všem řádkům v dotkovaných souborech.

Povolení a zakázání hromadného náhodného náhodného prohazování

Jakmile je konfigurace nastavená pro fond nebo relaci, budou funkce používat všechny vzory zápisu Sparku.

Pokud chcete použít optimalizaci sloučení s nízkým shufflem, povolte ji pomocí následující konfigurace:

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

Pokud chcete zkontrolovat aktuální hodnotu konfigurace, použijte příkaz, jak je znázorněno níže:

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

Pokud chcete tuto funkci zakázat, změňte následující konfiguraci, jak je znázorněno níže:

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