Sdílet prostřednictvím


Vyladění velikosti datových souborů tabulky Delta

Soubory s odpovídající velikostí jsou důležité pro výkon dotazů, využití prostředků a správu metadat. Menší soubory zvyšují režijní náklady na úlohy a operace metadat, zatímco větší soubory mohou nedostatečně využívat paralelismus a nerovnoměrnou distribuci vstupně-výstupních operací. Delta Lake používá metadata souborů pro ořezávání oddílů a vynechávání dat, takže správné zacílení velikosti souboru zajišťuje efektivní čtení, zápis a údržbu.

Doporučení týkající se velikosti souborů podle scénáře spotřeby (koncový bod SQL Analytics, Power BI Direct Lake, Spark) najdete v tématu Údržba a optimalizace tabulek napříč úlohami.

Následující části popisují hlavní funkce, které můžete použít k ladění velikosti souboru v tabulkách Delta.

Nastavitelné operace rozložení dat

Optimize

Příkaz OPTIMIZE přepíše malé soubory jako větší soubory, aby se zlepšilo rozložení dat v tabulkách Delta. Další podrobnosti, včetně informací o ladění velikosti souboru, najdete v dokumentaci k příkazu OPTIMIZE .

Automatické komprimace

Automatické komprimace automaticky vyhodnotí stav oddílu po každé operaci zápisu. Když zjistí nadměrnou fragmentaci souborů (příliš mnoho malých souborů) v rámci oddílu, aktivuje synchronní OPTIMIZE operaci okamžitě po potvrzení zápisu. Tento přístup řízený zápisem ke správě souborů je obecně optimální, protože kompaktace se provádí pouze v případě, že je programově určeno, že je přínosná. Podrobné možnosti konfigurace a další informace najdete v dokumentaci k automatickému komprimování .

Optimalizace zápisu

Optimalizace zápisu snižuje režii malých souborů provedením komprimace před zápisem (sdružování do větších celků), která generuje méně, ale větší soubory. Tento přístup seskupuje data v paměti do optimálně velkých binů před tím, než Spark zapíše soubory Parquet, čímž maximalizuje potenciál pro vytvoření správně nadimenzovaných souborů bez nutnosti okamžitých operací očištění po zápisu.

Písemnou optimalizaci používejte selektivně. V některých cestách pro zápis může náhodné prohazování přidat nepotřebnou dobu zpracování. Optimalizace zápisu je nejvhodnější v případě, že zápisy by jinak vytvářely mnoho malých souborů, které později vyžadují komprimace.

Snímek obrazovky znázorňující, jak optimalizace zápisů vede k menšímu počtu zápisů souborů

Optimalizace zápisu je běžně přínosná pro:

  • Dělené tabulky
  • Tabulky s častými malými vloženími
  • Operace, které se pravděpodobně dotknou mnoha souborů (MERGEUPDATE, a DELETE)

U selektivní aplikace pro konkrétní tabulky zrušte konfiguraci relace a povolte vlastnost tabulky jednotlivě. To umožňuje každé tabulce určit, jestli se použije optimalizace zápisu.

  1. Zrušit nastavení optimalizace zápisu

    spark.conf.unset("spark.databricks.delta.optimizeWrite.enabled")
    
  2. Povolit pro jednotlivou tabulku

    ALTER TABLE dbo.table_name
    SET TBLPROPERTIES ('delta.autoOptimize.optimizeWrite' = 'true')
    

Pokud chcete povolit optimalizaci zápisu pro zápis do všech dělených tabulek v relaci Sparku, ujistěte se, že konfigurace relace není nastavená, a pak nastavte spark.microsoft.delta.optimizeWrite.partitioned.enabled:

SET spark.microsoft.delta.optimizeWrite.partitioned.enabled = TRUE

Cílovou velikost souboru vygenerovanou z optimalizovaného zápisu spark.databricks.delta.optimizeWrite.binSize je možné upravit prostřednictvím konfigurace.

Poznámka:

Viz profily prostředků pro výchozí optimalizaci nastavení zápisu podle profilu prostředku.

Konzistentně nastavte cílovou velikost souboru

Pokud se chcete vyhnout nastavení samostatných konfigurací relace minimální a maximální velikosti souboru pro optimalizaci, automatické komprimace a optimalizaci zápisu delta.targetFileSize , použijte vlastnost tabulky. Tato vlastnost sjednocuje chování velikosti souboru na úrovni tabulky. Zadejte hodnotu jako řetězec bajtů (například 1073741824b, 1048576k, 1024m, 1g). Při nastavení má přednost před konfigurací relace a cílovou velikostí adaptivního souboru.

ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.targetFileSize' = '256m')

Adaptivní cílová velikost souboru

Microsoft Fabric poskytuje adaptivní nastavení cílové velikosti souboru, které eliminuje složitost spojenou s ručním nastavováním cílové velikosti souboru pro všechny tabulky v relaci nebo pro jednotlivé tabulky pomocí vlastnosti tabulky delta.targetFileSize. Adaptivní velikost cílového souboru využívá heuristiky tabulky Delta, jako je velikost tabulky, k odhadu ideální cílové velikosti souboru a automaticky ji aktualizuje při změně podmínek. Tím je zajištěn optimální výkon bez nutnosti manuálního zásahu a bez režijních nákladů na údržbu.

Povolení adaptivní cílové velikosti souboru

Poznámka:

V současné době není ve výchozím nastavení povolena, ale Microsoft doporučuje povolit konfiguraci relace adaptivní cílové velikosti souboru.

U tabulek vytvořených nebo upravených v relaci Sparku povolte adaptivní cílovou velikost souboru nastavením následující konfigurace relace Sparku:

SET spark.microsoft.delta.targetFileSize.adaptive.enabled = TRUE

Pochopit chování vyhodnocení

Pokud je tato možnost povolená, vyhodnotí se a nastaví se adaptivní cílová velikost souboru v následujících scénářích:

  • CREATE TABLE AS SELECT a CREATE OR REPLACE TABLE AS SELECT provoz
  • Přepsání zápisů (například DataFrame.write.mode("overwrite") nebo INSERT OVERWRITE)
  • Píše v režimu ErrorIfExists, Append nebo Ignore při vytváření nové tabulky.
  • Na začátku OPTIMIZE příkazu

Po nastavení se ideální velikost bude na začátku každé OPTIMIZE operace znovu vyhodnocovat, aby se zajistilo, že aktuální heuristiky odrážejí nejnovější distribuci dat a růst tabulek. Tento adaptivní přístup v průběhu času automaticky aktualizuje cílovou velikost souboru, takže při růstu vašich dat se při zachování výkonu dotazů a zápisu nevyžaduje ruční ladění. Pokud potřebujete zafixovat konkrétní velikost, například při hyper-tuningu nebo testovacích případech, můžete adaptivní nastavení přepsat explicitním nastavením vlastnosti tabulky definované uživatelem delta.targetFileSize.

Ladění hranic velikosti adaptivních cílových souborů

Adaptivní cílovou velikost souboru je možné dále nakonfigurovat pomocí následujících konfigurací relace Sparku:

Vlastnictví Description Výchozí hodnota Konfigurace relace
minFileSize Určuje minimální velikost souboru (dolní mez) jako řetězec bajtů, který při vyhodnocování používá adaptivní cílová velikost souboru. Musí být mezi 128 MB a 1 GB. 128 m spark.microsoft.delta.targetFileSize.adaptive.minFileSize
maxFileSize Určuje maximální velikost souboru (horní mez) jako řetězec bajtů, který při vyhodnocování používá adaptivní cílová velikost souboru. Musí být mezi 128 MB a 1 GB. 1024m spark.microsoft.delta.targetFileSize.adaptive.maxFileSize
stopAtMaxSize Když true zastaví další vyhodnocování velikosti, jakmile vypočítaná cílová velikost souboru dosáhne maxFileSize, tím se sníží režijní náklady na vyhodnocování u velmi velkých tabulek. true spark.microsoft.delta.targetFileSize.adaptive.stopAtMaxSize

Poznámka:

Když je stopAtMaxSize tato možnost povolená (výchozí), adaptivní cílová velikost zůstává po dosažení maximální hodnoty pevná, aby nedocházelo k dalším výpočtům. Pokud se vaše tabulky můžou po zvětšení zmenšit, nastavte tuto vlastnost tak, aby false umožňovala přepočet pod maximální prahovou hodnotu.

Zkontrolujte vyhodnocenou cílovou velikost

Velikost vyhodnoceného cílového souboru můžete zkontrolovat kontrolou detailů a vlastností tabulky z DESCRIBE DETAIL nebo DESCRIBE EXTENDED. Vyhodnocená hodnota je zapsána jako bajtový řetězec ve delta.targetFileSize.adaptive vlastnosti tabulky.

Tato hodnota se používá jako cílová (nebo maximální) velikost pro optimalizaci, automatické komprimace a optimalizaci zápisu. Související minimální hodnota se vypočítá jako polovina z delta.targetFileSize.adaptive.

Vysvětlení dopadu na výkon

Následující graf znázorňuje relaci mezi velikostí tabulky a optimální velikostí souboru Parquet. V tabulkách nižších než 10 GB modul runtime Fabric Spark vyhodnotí cílovou velikost souboru na 128 MB. S rostoucí velikostí tabulky se velikost cílového souboru škáluje lineárně a dosahuje až 1 GB pro tabulky, které překračují 10 TB.

Graf znázorňující relaci mezi velikostí tabulky a optimální velikostí souboru parquet

Počínaje malým objemem 128 MB a následným škálováním velikosti souborů formátu Parquet, jak tabulka narůstá, přináší kaskádové výhody:

  • Vylepšené přeskočení souborů Delta: Soubory správné velikosti podporují optimální clustering dat a přeskočení, což umožňuje protokolu Delta pro přeskočení souborů eliminovat více irelevantních souborů během provádění dotazů. Malá tabulka s 128MB soubory místo 1GB souborů umožňuje přeskočení 8x více souborů.

  • Nižší náklady na aktualizaci: MERGE a UPDATE operace přepisují pouze ovlivněné soubory. Soubory s správnou velikostí minimalizují počet souborů, které se dotkne jednotlivých operací, což snižuje množství přepsaných dat. S aktivovanými vektory odstranění se správné dimenzování souborů stává klíčovým: značky odstranění na úrovni řádků v nadměrně velkých souborech vedou k významným nákladům na vyčištění během operací kompakce nebo vyprázdnění.

  • Optimalizovaný paralelismus: Soubory s správnou velikostí umožňují Sparku dosáhnout ideálního paralelismu úloh. Příliš mnoho malých souborů zahltí plánovač úloh; příliš málo velkých souborů neefektivně využívá váš fond Sparku. Optimální velikost maximalizuje propustnost čtení i zápisu.

Adaptivní cílová velikost souboru může zlepšit výkon komprimace a latenci dotazů a zápisu, když vybere lepší velikost než výchozí konfigurace. Pokud adaptivní vyhodnocení vytvoří stejnou velikost jako výchozí konfigurace relace Sparku, neočekává se žádné měřitelné zlepšení.

Důležité

K zesílení zápisu dochází v případě, že se dříve komprimované soubory přepíší, protože se v průběhu času zvyšuje velikost cílového souboru. Chcete-li toto riziko snížit, povolte cíle komprimace na úrovni souboru (spark.microsoft.delta.optimize.fileLevelTarget.enabled=true). Toto nastavení pomáhá zachovat předchozí práci komprimace vynecháním nepotřebných rekompakcí souborů, které byly již komprimovány v rámci dřívějších cílových velikostí. Další informace naleznete v tématu cíle komprimace na úrovni souboru.

Shrnutí osvědčených postupů

Pomocí těchto doporučení můžete vyvážit náklady na zápis, výkon čtení a režijní náklady na údržbu, jak tabulky rostou.

  • Povolit automatickou komprimaci pro přijímací kanály s častými malými zápisy (streamování nebo mikrodávky), aby se zdraví souborů zachovalo bez ručního plánování.
  • Automatické komprimace selektivně používejte pro jiné vzory zápisu , když cíle na úrovni služby můžou tolerovat občasné špičky latence zápisu.
  • Povolte adaptivní cílovou velikost souboru , abyste snížili ruční ladění a udrželi cílové velikosti v souladu s růstem tabulky.
  • Použití optimalizace zápisu v kontrolovaných cestách příjmu dat (dávkové úlohy, které mohou tolerovat náhodné prohazování, dělené zápisy nebo časté malé zápisy) ke snížení tlaku podřízeného komprimace.
  • Naplánujte úplnou tabulku OPTIMIZE během klidných období, když potřebujete přepsat mnoho oddílů nebo použít Z-Order.
  • Povolte rychlou optimalizaci a snižte amplifikaci zápisu, abyste OPTIMIZE udělali více idempotentním. Podívejte se na rychlou optimalizaci.
  • Používejte delta.targetFileSize nebo konzistentně nastavte adaptivní cílovou velikost souborů, aby optimalizace, automatické komprimování a optimalizace zápisu směřovaly ke kompatibilním cílům velikosti souborů.
  • Povolte cíle komprimace na úrovni souborů , aby se snížila zbytečná rekompakce, protože se cílové velikosti souborů v průběhu času zvyšují.