Řízení velikosti datového souboru

Note

Doporučení ručního ladění se nevztahují na spravované tabulky Katalogu Unity, které používají automatické ladění velikosti souborů. U nových tabulek použijte spravované tabulky Katalogu Unity s výchozím nastavením.

V Databricks Runtime 13.3 LTS a novějších doporučuje Databricks používat clustering pro rozložení tabulky. Viz Použití metody 'liquid clustering' pro tabulky.

Databricks doporučuje použít prediktivní optimalizaci pro automatické spouštění OPTIMIZE a VACUUM pro tabulky. Viz prediktivní optimalizaci pro spravované tabulky v katalogu Unity .

Automatické komprimace a optimalizované zápisy jsou vždy povoleny pro MERGE, UPDATEa DELETE operace. Tuto funkci nemůžete vypnout.

Azure Databricks automaticky upravuje velikosti souborů pro spravované tabulky Unity Catalog. U externích tabulek a starších úloh můžete nakonfigurovat automatické komprimace, optimalizované zápisy a cílové velikosti souborů, abyste mohli řídit způsob zápisu a komprimace dat.

U spravovaných tabulek Unity Catalog Databricks většinu konfigurací automaticky upravuje, pokud používáte SQL Warehouse nebo Databricks Runtime 11.3 LTS či novější.

Pokud upgradujete úlohu z Databricks Runtime 10.4 LTS nebo níže, přečtěte si téma Upgrade na automatické komprimace na pozadí.

Kdy spustit OPTIMIZE

Automatické komprimace a optimalizované zápisy zmenšují malé problémy se soubory, ale nejsou úplnou náhradou za OPTIMIZE. U tabulek větších než 1 TB doporučuje Databricks spouštět OPTIMIZE podle plánu pro další konsolidaci souborů. Databricks doporučuje liquid clustering pro lepší přeskočení dat. Pokud je povoleno clustering kapaliny, OPTIMIZE automaticky reorganizuje data pomocí klíčů shlukování. Viz Použití metody 'liquid clustering' pro tabulky.

U spravovaných tabulek v Katalogu Unity se prediktivní optimalizace automaticky spouští OPTIMIZE u tabulek s povolenou prediktivní optimalizací.

Automatická optimalizace

Automatická optimalizace popisuje nastavení autoOptimize.autoCompact a autoOptimize.optimizeWrite. Viz automatické komprimace a optimalizované zápisy.

Automatické zhuštění

Automatické komprimace kombinuje malé soubory v oddílech tabulky, aby se snížily malé problémy se soubory. Běží synchronně v clusteru, který provádí zápis, po úspěšném zápisu a komprimuje pouze soubory, které nebyly dříve komprimovány.

Automatické komprimace a prediktivní optimalizace jsou nezávislé funkce, které lze použít samostatně nebo společně. Automatické komprimace běží v clusteru, který provádí zápis, zatímco prediktivní optimalizace spouští operace údržby asynchronně pomocí bezserverového výpočetního prostředí.

Ke konfiguraci automatické komprimace použijte následující nastavení:

Setting Delta Iceberg Description
Povolit automatické komprimace (vlastnost tabulky) autoOptimize.autoCompact autoOptimize.autoCompact Umožňuje automatické komprimace na úrovni tabulky.
Povolení automatické kompaktace (Spark relace) spark.databricks.delta.autoCompact.enabled spark.databricks.iceberg.autoCompact.enabled Povolí automatické komprimace na úrovni relace.
Maximální velikost výstupního souboru spark.databricks.delta.autoCompact.maxFileSize spark.databricks.iceberg.autoCompact.maxFileSize Řídí velikost cílového výstupního souboru.
Minimální počet souborů pro aktivaci komprimace spark.databricks.delta.autoCompact.minNumFiles spark.databricks.iceberg.autoCompact.minNumFiles Nastaví minimální počet malých souborů požadovaných v oddílu nebo tabulce pro aktivaci automatické komprimace.

Tato nastavení přijímají následující možnosti:

Možnosti Chování
auto (doporučeno) Ladí cílovou velikost souboru a zároveň respektuje další funkce automatického ladění.
legacy Alias pro true.
true Jako cílovou velikost souboru použijte 128 MB. Žádné dynamické změny velikosti.
false Vypne automatické zhušťování. Lze nastavit na úrovni relace, aby se přepsalo nastavení automatického komprimování pro všechny tabulky upravené v pracovní zátěži.

Note

Azure Databricks doporučuje použít automatické ladění k řízení velikosti výstupního souboru na základě velikosti tabulky. Viz Velikost souboru automatického ladění na základě velikosti tabulky.

Pokud chcete potvrdit, že automatické komprimace běžela v tabulce, zkontrolujte historii tabulek. Automatická kompakce se zobrazí jako operace OPTIMIZE s polem operationParameters.auto nastaveným na true. Ručně spuštěný příkaz OPTIMIZEauto nastaveno na false. Viz Určení typu OPTIMIZE operace.

Optimalizované zápisy

Optimalizované zápisy zlepšují velikost souboru při zápisu dat a zlepšují následná čtení v tabulce.

Optimalizované zápisy jsou nejúčinnější pro dělené tabulky, protože snižují počet malých souborů zapsaných do každého oddílu. Zápis méně velkých souborů je efektivnější než zápis mnoha malých souborů, ale stále se může zobrazit zvýšení latence zápisu, protože data se před zápisem zahazují.

Následující obrázek ukazuje, jak optimalizované zápisy fungují:

Optimalizované zápisy

Note

Pokud používáte optimalizované zápisy, Databricks doporučuje, abyste nespustíte coalesce(n) nebo repartition(n) těsně před zápisem, abyste mohli řídit počet zapsaných souborů.

Optimalizované zápisy jsou ve výchozím nastavení povolené pro následující operace:

  • MERGE
  • UPDATE s poddotazy
  • DELETE s poddotazy

Optimalizované zápisy jsou také povoleny pro CTAS příkazy a INSERT operace při použití SQL Warehouse. Ve službě Databricks Runtime 13.3 LTS a vyšší mají všechny tabulky zaregistrované v katalogu Unity povolené optimalizované zápisy pro CTAS příkazy a INSERT operace pro particionované tabulky.

Optimalizované zápisy je možné povolit na úrovni tabulky nebo relace pomocí následujících nastavení:

  • Vlastnost tabulky: autoOptimize.optimizeWrite
  • Nastavení SparkSession: spark.databricks.delta.optimizeWrite.enabled (Delta) nebo spark.databricks.iceberg.optimizeWrite.enabled (Iceberg)

Tato nastavení přijímají následující možnosti:

Možnosti Chování
true Jako cílovou velikost souboru použijte 128 MB.
false Vypne optimalizované zápisy. Lze nastavit na úrovni relace k přepsání optimalizovaných zápisů pro všechny tabulky upravené v rámci pracovní zátěže.

Nastavení cílové velikosti souboru

Pokud chcete vyladit velikost souborů v tabulce, nastavte vlastnosttargetFileSize tabulky na požadovanou velikost. Je-li tato možnost nastavena, všechny operace optimalizace rozložení dat se v maximální možné míře snaží vytvářet soubory o zadané velikosti, včetně optimize, liquid clustering, automatického slučování a optimalizovaných zápisů.

Note

Pokud používáte spravované tabulky a SQL sklady Katalogu Unity nebo verzi Databricks Runtime 11.3 LTS a vyšší, pouze příkazy OPTIMIZE respektují nastavení targetFileSize.

Vlastnictví Description
delta.targetFileSize (Delta)
iceberg.targetFileSize (Iceberg)
Typ: Velikost v bajtech nebo vyšších jednotkách.
Popis: Cílová velikost souboru. Například 104857600 (bajty) nebo 100mb.
Výchozí hodnota: None

U existujících tabulek můžete nastavit a zrušit nastavení vlastností pomocí příkazu SQL ALTER TABLESET vlastnosti TBL. Tyto vlastnosti můžete také nastavit automaticky při vytváření nových tabulek pomocí konfigurací relace Sparku. Podrobnosti najdete v referenčních informacích k vlastnostem tabulky .

Automaticky upravit velikost souboru podle velikosti tabulky

Aby se minimalizovalo ruční ladění, Azure Databricks automaticky upravuje velikost souborů tabulek na základě velikosti tabulky. Azure Databricks používá menší velikosti souborů pro menší tabulky a větší velikosti souborů pro větší tabulky, aby se počet souborů v tabulce nezvětšil příliš velký. Azure Databricks automaticky nenaladí tabulky, které jste naladili s konkrétní cílovou velikostí.

Cílová velikost souboru je založená na aktuální velikosti tabulky. U tabulek menších než 2,56 TB je velikost automaticky vyladěného cílového souboru 256 MB. U tabulek s velikostí mezi 2,56 TB a 10 TB roste cílová velikost lineárně od 256 MB do 1 GB. U tabulek větších než 10 TB je cílová velikost souboru 1 GB.

Note

Když se cílová velikost souboru pro tabulku zvětší, existující soubory se neoptimalizuje do větších souborů příkazem OPTIMIZE. Velká tabulka proto může mít vždy některé soubory, které jsou menší než cílová velikost. Pokud je potřeba optimalizovat i menší soubory do větších souborů, můžete pro tabulku nakonfigurovat pevnou cílovou velikost pomocí vlastnosti tabulky targetFileSize.

Při přírůstkovém zápisu tabulky se cílové velikosti souborů a počty souborů v závislosti na velikosti tabulky blíží následujícím číslům. Počty souborů v této tabulce jsou pouze příkladem. Skutečné výsledky se budou lišit v závislosti na mnoha faktorech.

Velikost tabulky Cílová velikost souboru Přibližný počet souborů v tabulce
10 GB 256 MB 40
1 TB 256 MB 4096
2,56 TB 256 MB 10240
3 TB 307 MB 12108
5 TB (terabajtů) 512 MB 17339
7 TB 716 MB 20784
10 terabajtů 1 GB 24437
20 TB (terabajtů) 1 GB 34437
50 TB 1 GB 64437
100 TB 1 GB 114437

Omezení řádků zapsaných v datovém souboru

V některých případech můžou tabulky s úzkými daty narazit na chybu, kdy počet řádků v daném datovém souboru překračuje limity podpory formátu Parquet. Chcete-li se této chybě vyhnout, můžete pomocí konfigurace spark.sql.files.maxRecordsPerFile relace SQL určit maximální počet záznamů pro zápis do jednoho souboru pro tabulku. Určení hodnoty nuly nebo záporné hodnoty představuje žádný limit.

Možnost DataFrameWriter maxRecordsPerFile můžete použít také při zápisu do tabulky pomocí rozhraní API datového rámce. Po specifikaci maxRecordsPerFile se hodnota konfigurace relace SQL spark.sql.files.maxRecordsPerFile ignoruje.

Note

Databricks nedoporučuje používat maxRecordsPerFile , pokud není nutné se této chybě vyhnout. Toto nastavení může být nezbytné pro některé spravované tabulky Katalogu Unity s velmi úzkými daty.

Upgrade na automatickou komprimaci na pozadí

Automatická komprimace na pozadí je k dispozici pro spravované tabulky Unity Catalog. Automatické komprimace pozadí nevyžaduje prediktivní optimalizaci. Při migraci starší verze úlohy nebo tabulky postupujte takto:

  1. Odeberte konfiguraci Sparku spark.databricks.delta.autoCompact.enabled (Delta) nebo spark.databricks.iceberg.autoCompact.enabled (Iceberg) z nastavení konfigurace clustru nebo notebooku.
  2. Pro každou tabulku spusťte ALTER TABLE <table_name> UNSET TBLPROPERTIES (delta.autoOptimize.autoCompact) příkaz (Delta) nebo ALTER TABLE <table_name> UNSET TBLPROPERTIES (iceberg.autoOptimize.autoCompact) (Iceberg) a odeberte všechna starší nastavení automatické komprimace.

Po odebrání těchto starších konfigurací se automatické komprimace na pozadí automaticky aktivuje pro všechny spravované tabulky Katalogu Unity.