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.
Když dotaz spojí velkou tabulku Delta Lake s menší, filtrovanou tabulkou, hodnoty filtrů nejsou známy, dokud dotaz neproběhne. Bez prořezávání za běhu dotaz prohledá každý soubor ve velké tabulce, dokonce i soubory, které neobsahují odpovídající řádky. Dynamické prořezávání souborů tento problém řeší. Za běhu optimalizátor posílá výsledky filtru z jedné strany joinu do skenování tabulky Delta Lake a přeskakuje soubory, které nemohou obsahovat odpovídající řádky.
Dynamické prořezávání souborů je ve výchozím nastavení zapnuto. Nemusíte měnit své dotazy, abyste z toho měli prospěch.
Když se aplikuje dynamické prořezávání souborů
Dynamické prořezávání souborů se vztahuje pouze na spojení v tabulkách Delta Lake. V příkazu SQL MERGE používá hodnoty klíče spojení ze zdroje, aby přeskočil cílové soubory, když podmínka sloučení porovnává sloupec zdroje s cílovým sloupcem na rovnost. V UPDATE a DELETE příkazech se uplatňuje, když podmínka obsahuje poddotaz, který provádí stejný druh porovnání.
Dynamické prořezávání souborů v příkazech MERGE, UPDATE a DELETE vyžaduje výpočetní prostředky s podporou Photonu. U SELECT příkazů SQL má Photon širší a spolehlivější dynamické ořezávání souborů. Bez Photon by dynamické ořezávání souborů mohlo stále platit pro SELECT příkazy SQL v závislosti na tvaru dotazu a plánu provádění. Podívejte se na co je Photon?
Dynamické prořezávání souborů zlepšuje výkon především u neparticionovaných tabulek a u spojení nad neparticionovanými sloupci. Ve výchozím nastavení se spustí pouze tehdy, když je velká tabulka Delta Lake v join alespoň 10 GB a obsahuje alespoň 10 souborů. Viz Konfigurace.
Dynamické prořezávání souborů také snižuje konflikty zápisu. Když Delta Lake během commitu kontroluje konflikty, považuje soubory, které dynamické ořezávání souborů přeskočilo. To snižuje počet neúspěšných transakcí. Viz Úrovně izolace a konflikty zápisu.
Doporučené postupy
Výkonnostní efekt dynamického prořezávání souborů souvisí s tím, jak jsou data shlukována. Pokud jsou hodnoty, na které spojujete, rozložené do všech souborů, dynamické prořezávání souborů přeskočí jen několik souborů. Aby dynamické prořezávání souborů mohlo přeskočit více souborů, postupujte podle těchto postupů:
- Použijte liquid clustering na sloupcích, podle kterých často provádíte spojení, aby shodné řádky byly umístěny v méně souborech.
- Použijte výpočty s podporou Photon, které příkazy
MERGE,UPDATEaDELETEvyžadují pro dynamické ořezávání souborů.
Konfigurace
Většina pracovních zátěží tato nastavení měnit nemusí. Zvažte ladění prahů, pokud by spojení proti menší tabulce Delta Lake mělo prospěch z prořezávání, ale nedosahuje výchozí prahové hodnoty velikosti nebo počtu souborů.
Tyto konfigurační vlastnosti Apache Spark ovládají dynamické ořezávání souborů:
| Property | Typ | Výchozí | Description |
|---|---|---|---|
spark.databricks.optimizer.dynamicFilePruning |
Boolean |
true |
Zapíná nebo vypíná dynamické prořezávání souborů. |
spark.databricks.optimizer.deltaTableSizeThreshold |
Long |
10000000000 (10 GB) |
Minimální velikost velké tabulky Delta Lake v bajtech ve spojení, které spouští dynamické prořezávání souborů. U menší tabulky je obvykle levnější skenovat celou tabulku než tlačit filtry dolů. Chcete-li zjistit velikost tabulky Delta Lake, spusťte DESCRIBE DETAIL table_name a zkontrolujte sloupec sizeInBytes. |
spark.databricks.optimizer.deltaTableFilesThreshold |
Integer |
10 |
Minimální počet souborů ve velké tabulce Delta Lake při spojení, který spouští dynamické ořezávání souborů. Pokud má tabulka méně souborů než je tento limit, dynamické prořezávání souborů se nespustí, protože nemusí být užitečné pro tabulku s pouhými několika soubory. Chcete-li najít počet souborů v tabulce Delta Lake, spusťte DESCRIBE DETAIL table_name a zkontrolujte sloupec numFiles . |