Sdílet prostřednictvím


Komprimace tabulek Delta

Soubory tabulek Delta se časem fragmentují. Fragmentace zvyšuje režijní náklady na operace souborů, snižuje efektivitu komprese a může omezovat paralelismus čtenáře. Komprimace přepíše mnoho malých souborů do méně souborů s správnou velikostí, aby Spark mohl číst a zpracovávat data efektivněji.

Příkaz OPTIMIZE je primární operace komprimace. Seskupí malé soubory do přihrádek, které cílí na ideální velikost souboru, a následně je zapíše do úložiště.

Pokyny pro různé úlohy týkající se strategií komprimace napříč koncovým bodem SQL Analytics, Power BI Direct Lake a Sparkem najdete v tématu Údržba a optimalizace tabulek napříč úlohami.

Metody komprimace

Microsoft Fabric nabízí několik přístupů k zachování optimálních velikostí souborů v tabulkách Delta:

Příkaz OPTIMIZE

Příkaz OPTIMIZE je základní operací pro komprimaci tabulek Delta. Přepíše malé soubory do větších souborů, aby se zlepšilo rozložení dat v tabulkách Delta.

OPTIMIZE dbo.table_name
Vlastnictví Description Výchozí hodnota Konfigurace relace
minFileSize Soubory, které jsou menší než tato prahová hodnota, se seskupí dohromady a přepíšou se jako větší soubory. 1073741824 (1g) spark.databricks.delta.optimize.minFileSize
maxFileSize Cílová velikost souboru vytvořená příkazem OPTIMIZE . 1073741824 (1g) spark.databricks.delta.optimize.maxFileSize

OPTIMIZE je idempotentní, ale nadměrný minFileSize může zvýšit zápisovou amplifikaci. Například s nastaveným minFileSize na 1 GB může být soubor 900 MB přepsán po malém dalším zápisu. Pokyny pro automatickou správu velikostí souborů najdete v tématu Adaptivní cílová velikost souboru.

OPTIMIZE s pořadím Z

Když použijete ZORDER BY klauzuli, OPTIMIZE přepíše aktivní soubory tak, aby řádky s podobnými hodnotami byly uloženy ve stejných souborech. Tím se zlepší přeskočení souborů pro selektivní filtry. Použití pořadí Z v případech:

  • Vaše dotazy často filtrují dva nebo více sloupců dohromady (například datum + customer_id) a
  • Tyto predikáty jsou dostatečně selektivní, aby přeskočení na úrovni souboru snížilo počet naskenovaných souborů.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2)

OPTIMIZE s V-Order

VORDER klauzule vede k tomu, že soubory určené pro komprimaci mají použitou optimalizaci V-Order. Další informace o objednávce V naleznete v podrobné dokumentaci.

OPTIMIZE dbo.table_name VORDER

OPTIMIZE s kapalinovým shlukováním

Liquid clustering je specifikováno jako možnost tabulky; viz povolení liquid clusteringu pro podrobnosti. Pokud je povolený liquid clustering, OPTIMIZE provede fyzické přepsání, které použije zásady seskupování.

Důležité

Data jsou clusterovaná pouze tehdy, když OPTIMIZE je spuštěno na tabulkách, které mají povolené clusterování. Běžné operace zápisu neshlukují data. Strategie komprimace, jako je použití automatického komprimace nebo ruční plánování úloh optimalizace, je velmi důležitá, aby se zajistily výhody clusterovaných dat (tj. vylepšené přeskočení souborů Delta).

Rychlá optimalizace

Rychlá optimalizace inteligentně analyzuje soubory tabulek Delta a přeskočí operace komprimace, které pravděpodobně nezlepší výkon smysluplně.

Místo bezhlavého komprimování souborů, kdykoli existují malé soubory, rychlá optimalizace vyhodnotí, zda každá kandidátní skupina (skupina malých souborů) splňuje konfigurované cíle optimalizace podle osvědčených postupů. Funkce Fast Optimize spouští komprimaci pouze na skupině souborů, pokud jejich sloučení dosáhne minimální cílové velikosti, nebo pokud je tam příliš mnoho malých souborů. V opačném případě tuto skupinu přeskočí nebo sníží počet souborů, které komprimuje.

SET spark.microsoft.delta.optimize.fast.enabled = TRUE

Rychlá optimalizace se dá vyladit na základě vašich očekávání komprimace:

Vlastnictví Description Výchozí hodnota Konfigurace relace
minNumFiles Počet malých souborů, které musí existovat ve schránce, aby bylo možné provést optimalizaci, pokud schránka neobsahuje dostatek dat odhadovaných k vytvoření komprimovaného souboru. 50 spark.microsoft.delta.optimize.fast.minNumFiles
parquetCoefficient Vynásobením minimální velikosti souboru optimalizace určí minimální množství dat malých souborů, které musí být v koši, aby byl tento koš zahrnut do rozsahu komprimace. 1.3 spark.microsoft.delta.optimize.fast.parquetCoefficient

Poznámka:

Výsledek parquetCoefficient je, že cílová velikost segmentu je větší než minimální požadovaná velikost souboru v kontextu optimalizace. Tento koeficient zohledňuje skutečnost, že kombinace více malých parquet souborů vede k lepší kompresi, a tedy k menšímu množství dat než součet malých souborů. Tuto hodnotu lze zvýšit, aby byla opatrnější v tom, jak často rychlá optimalizace přeskakuje koše, nebo snížit, aby umožnila volnější přeskakování košů.

Jak to funguje

Rychlá optimalizace zavádí další kontroly před zhutněním zásobníků. Pro každou kandidátní přihrádku rychlá optimalizace vyhodnocuje:

  • Odhadované množství surových dat v koši (součet malé velikosti souborů)
  • Určuje, jestli se při kombinování malých souborů odhaduje vytvoření souboru, který splňuje nakonfigurovanou minimální cílovou velikost.
  • Jestli koš obsahuje alespoň konfigurovaný minimální počet malých souborů

Rychlá optimalizace vyhodnocuje každou přihrádku malých souborů a komprimuje pouze malé soubory, které pravděpodobně dosáhnou minimální cílové velikosti nebo překročí minimální počet souborů. Koše, které nesplňují tyto prahové hodnoty, se přeskočí nebo částečně zkompaktují. Vynechání neoptimálních intervalů omezuje nepotřebné přepisy, redukuje amplifikaci zápisu a činí úlohy OPTIMIZE více idempotentními.

Snímek obrazovky ukazuje, jak rychle funkce optimalizace vyhodnocuje komprimaci koše.

Poznámka:

Přesná implementace se v průběhu času vyvíjí.

Rychlá optimalizace může snížit přepsaná data v průběhu životního cyklu tabulky Delta. Jak je znázorněno v následujícím diagramu, rychlá optimalizace přeskočí neoptimální koše, což vede k rychlejším a idempotentnějším OPTIMIZE úlohám s menším zesílením zápisu.

Snímek obrazovky znázorňující, jak rychlá optimalizace vede k menšímu přepsání dat v průběhu času

Poznámka:

Pro ilustraci pouze výše uvedené diagramy předpokládají, že velikost souboru zapsaného z komprimace je součet velikosti malých souborů. To také znamená hodnotu parquetCoefficient rovnou 1.

Omezení
  • Nevztahuje se na shlukování kapalin a operace Z-Order.
  • Rychlá optimalizace nemění chování automatického komprimace.

Cíle komprimace na úrovni souborů

Chcete-li zabránit přepsání dat, která byla dříve považována za komprimovaná (dostatečně velká) na základě změny minimálních a maximálních cílů komprimace souborů, spark.microsoft.delta.optimize.fileLevelTarget.enabled je možné povolit, aby se zabránilo rekompakci již komprimovaných souborů. Pokud je tato možnost povolená, soubory se nekompaktují, pokud v době komprimace splňovaly alespoň polovinu cílové velikosti souboru. Udržování cílů na úrovni souboru minimalizuje zapisovací zesílení, protože se mění cílová velikost komprimace v průběhu času (například z vyhodnocení a nastavení větší cílové velikosti souboru). Pokud je tato možnost povolena, je značka OPTIMIZE_TARGET_SIZE přidána do nových souborů při spuštění OPTIMIZE nebo při jakékoli operaci zápisu, pokud je nastavena vlastnost tabulky delta.targetFileSize nebo delta.targetFileSize.adaptive.

Poznámka:

I když není ve výchozím nastavení povolená, společnost Microsoft doporučuje povolit cíle komprimace na úrovni souboru , aby se omezila potenciální amplifikace zápisu.

SET spark.microsoft.delta.optimize.fileLevelTarget.enabled = TRUE

Automatické komprimace

Automatické komprimace 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ý autorem k údržbě souborů je optimální, protože komprimace se spustí pouze tehdy, když je programově určeno, že je prospěšné.

Povolit na úrovni relace

Nastavte spark.databricks.delta.autoCompact.enabled na úrovni relace a povolte automatické komprimace pro nové tabulky vytvořené v této relaci Sparku:

SET spark.databricks.delta.autoCompact.enabled = TRUE

Povolit na úrovni tabulky

Nastavte vlastnost delta.autoOptimize.autoCompact tabulky tak, aby povolte automatické komprimace pro konkrétní tabulky:

CREATE TABLE dbo.table_name
TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')

Pomocí možnosti delta.autoOptimize.autoCompact DataFrameWriter povolte automatické komprimace při vytváření tabulky:

df.write.option('delta.autoOptimize.autoCompact', 'true').saveAsTable('dbo.table_name')

U existující tabulky povolte stejnou vlastnost tabulky:

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

Ladění prahových hodnot automatické komprimace

Vylaďte chování automatické komprimace nastavením těchto konfigurací relace ve Spark:

Vlastnictví Description Výchozí hodnota Konfigurace relace
maxFileSize Cílová maximální velikost souboru v bajtech pro komprimované soubory. 134217728b (128 MB) spark.databricks.delta.autoCompact.maxFileSize
minFileSize Minimální velikost souboru v bajtech pro soubor, který má být považován za komprimovaný. Cokoliv pod touto prahovou hodnotou se považuje za komprimace a počítá se do prahové minNumFiles hodnoty. Ve výchozím nastavení není nastaven, vypočítává se jako 1/2 z hodnoty maxFileSize, pokud explicitně nenastavíte hodnotu. spark.databricks.delta.autoCompact.minFileSize
minNumFiles Minimální počet souborů, které musí existovat pod prahem minFileSize, aby byla spuštěna automatická komprese. 50 spark.databricks.delta.autoCompact.minNumFiles

Volba mezi automatickým komprimacem a plánovanou optimalizací

Microsoft doporučuje automatické komprimace jako výchozí strategii pro většinu úloh příjmu dat. Obvykle překonává pevné plány a snižuje provozní režii při údržbě OPTIMIZE úloh.

Pokud jsou vaše cíle latence přísné, naplánované OPTIMIZE v samostatném fondu Sparku můžou být vhodnější, protože automatické komprimace běží synchronně po zápisu.

Komprimace se používá společně s funkcemi ochrany před malými soubory, jako je optimalizace zápisu. Pokyny najdete v tématu Optimalizace zápisu.

Údržba tabulek Lakehouse

Můžete spouštět ad hoc operace údržby, například OPTIMIZE z Lakehouse Exploreru. Další informace najdete v tématu Údržba tabulek Lakehouse.

Shrnutí osvědčených postupů

Pomocí těchto doporučení můžete vyrovnávat náklady na zápis, výkon čtení a režijní náklady na údržbu pro komprimace tabulek Delta.

  • Povolit automatickou kompakci u příjmových kanálů s častými malými zápisy (streamování nebo mikrobatch) pro snížení potřeby 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.
  • 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.
  • 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í.
  • Použití optimalizace zápisu v vhodných cestách příjmu dat, protože komprimace před zápisem je často méně nákladná než komprimace po zápisu. Pokyny najdete v tématu Optimalizace zápisu.