Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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:
- Používejte spravované tabulky Unity Catalog. Viz tabulky spravované službou Unity Catalog pro Delta Lake a Apache Iceberg.
- Použijte prediktivní optimalizaci. Viz prediktivní optimalizaci pro spravované tabulky v katalogu Unity .
- Používejte shlukování tekutin. Viz Použití metody 'liquid clustering' pro tabulky.
- Při odstraňování a opětovném vytvoření tabulky ve stejném umístění byste měli vždy použít
CREATE OR REPLACE TABLEpříkaz. Podívejte se na Odstranění nebo nahrazení tabulky.
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ě volatREFRESH 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] PARTITIONaniMSCK. -
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žijteWHEREklauzuli pro přeskočení dat, napříkladspark.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
mergeprohledá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 podlecountryadatechcete použítmergek 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
mergeně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 Sparkspark.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
mergemůž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.