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.
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.
| 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.
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.
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.
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:
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
OPTIMIZEbě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
OPTIMIZEudě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.