Osvědčené postupy: Delta Lake

Tento článek popisuje osvědčené postupy při používání Delta Lake.

Přehled osvědčených postupů

Níže jsou uvedená obecná doporučení, která platí pro většinu úloh Delta Lake:

Odebrání starších konfigurací Delta

Databricks doporučuje při upgradu na novou verzi Databricks Runtime odebrat většinu explicitních starších konfigurací Delta z konfigurací Sparku a vlastností tabulek. Starší konfigurace můžou zabránit použití nových optimalizací a výchozích hodnot zavedených službou Databricks pro migrované úlohy.

Komprimovat soubory

Prediktivní optimalizace automaticky spouští příkazy OPTIMIZE a VACUUM na spravovaných tabulkách Katalogu Unity. Viz prediktivní optimalizaci pro spravované tabulky v katalogu Unity .

Databricks doporučuje často spouštět příkaz OPTIMIZE pro komprimování malých souborů.

Poznámka:

Tato operace neodebere staré soubory. Pokud je chcete odebrat, spusťte příkaz VACUUM.

Nepoužívejte ukládání do mezipaměti Spark s Delta Lake

Databricks nedoporučuje používat ukládání do mezipaměti Spark z následujících důvodů:

  • Přijdete o přeskočení dat, která můžou pocházet z dalších filtrů přidaných k mezipaměti DataFrame.
  • Data, která se načte do mezipaměti, nemusí být aktualizována, pokud se k tabulce přistupuje pomocí jiného identifikátoru.

Rozdíly mezi Delta Lake a Parquet v Apache Sparku

Delta Lake zpracovává následující operace automaticky. Tyto operace byste nikdy neměli provádět ručně:

  • REFRESH TABLE: Tabulky Delta Lake vždy vracejí nejaktuálnější informace, takže po změnách není nutné ručně volat REFRESH TABLE.
  • Přidání a odebrání oddílů: Delta Lake automaticky sleduje sadu oddílů, které jsou přítomné v tabulce, a aktualizuje seznam při přidávání nebo odebírání dat. V důsledku toho není nutné spouštět ALTER TABLE [ADD|DROP] PARTITION ani MSCK.
  • Načtení jednoho oddílu: Není nutné číst oddíly přímo. Například nemusíte spouštět spark.read.format("parquet").load("/data/date=2017-01-01"). Místo toho použijte WHERE klauzuli pro přeskočení dat, například spark.read.table("<table-name>").where("date = '2017-01-01'").
  • Neupravujte ručně datové soubory: Delta Lake používá transakční protokol k potvrzení změn v tabulce atomicky. Datové soubory Parquet v tabulce Delta Lake přímo neupravujte, nepřidávejte ani neodstraňujte, protože to může vést ke ztrátě dat nebo poškození tabulky.

Zlepšit výkon při operaci sloučení v Delta Lake

Pomocí následujících přístupů můžete zkrátit dobu potřebnou ke sloučení:

  • Zúžení prostoru vyhledávání shod: Ve výchozím nastavení operace merge prohledává celou tabulku Delta Lake, aby našla shody se zdrojovou tabulkou. Jedním ze způsobů, jak urychlit hledání merge , je snížit prostor hledání přidáním známých omezení do podmínky shody. Předpokládejme například, že máte tabulku rozdělenou podle country a date chcete použít merge k aktualizaci informací za poslední den a konkrétní zemi. Když přidáte následující podmínku, dotaz se zrychlí, protože hledá shody pouze v příslušných particích.

    events.date = current_date() AND events.country = 'USA'
    

    Kromě toho tento dotaz také snižuje pravděpodobnost konfliktů s jinými souběžnými operacemi. Viz Úrovně izolace a konflikty zápisu pro další podrobnosti.

  • Kompaktní soubory: Pokud jsou data uložená v mnoha malých souborech, může čtení těchto dat za účelem vyhledání shod být pomalé. Kvůli zlepšení propustnosti čtení můžete komprimovat malé soubory do větších souborů. Podrobnosti najdete v tématu Optimalizace rozložení datového souboru.

  • Řídit oddíly náhodného prohazování pro zápisy: Operace merge několikrát prohazuje data pro výpočet a zápis aktualizovaných dat. Počet úloh používaných k prohazování je řízen konfigurací relace Spark spark.sql.shuffle.partitions. Nastavení tohoto parametru nejen řídí paralelismus, ale také určuje počet výstupních souborů. Zvýšení hodnoty zvyšuje paralelismus, ale také generuje větší počet menších datových souborů.

  • Povolit optimalizované zápisy: U dělených tabulek merge může vzniknout mnohem větší počet malých souborů než počet shuffle oddílů. Důvodem je, že každá úloha zamíchání může zapisovat více souborů do více oddílů a může se stát výkonnostní překážkou. Počet souborů můžete snížit povolením optimalizovaných zápisů. Viz Optimalizované zápisy.

  • Vyladění velikostí souborů v tabulce: Azure Databricks automaticky naladí velikosti souborů na základě velikosti tabulky a použije menší soubory pro menší tabulky a větší soubory pro větší tabulky. Podrobnosti najdete v části věnované ladění velikostí souborů.

  • Nízké Shuffle sloučení: Nízké Shuffle sloučení nabízí optimalizovanou implementaci MERGE, která zajišťuje lepší výkon pro většinu běžných pracovních zátěží. Kromě toho zachovává stávající optimalizace rozložení dat, jako je například shlukování kapalin u neupravených dat.