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ě.
Pro návod pro strategie kompaktace napříč různými zátěžemi napříč SQL analytickými endpointy, Power BI Direct Lake a Spark viz Údržba a optimalizace tabulky napříč pracovními zátěžemi.
Metody komprimace
Fabric nabízí několik přístupů k udržení optimální velikosti 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 (1 GB) | spark.databricks.delta.optimize.minFileSize |
| maxFileSize | Cílová velikost souboru vytvořená příkazem OPTIMIZE . |
1073741824 (1 GB) | 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řepsaný po malém dodatečné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. Kolokované rozvržení umožňuje efektivnější přeskakování souborů při použití selektivních filtrů. 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 řádem V
Tato klauzule VORDER vede k tomu, že soubory určené pro kompaktaci mají aplikovanou optimalizaci V-pořadí. Pro více informací o V-order viz podrobná dokumentace.
OPTIMIZE dbo.table_name VORDER
Lze kombinovat Z-Order a V-Order v jednom příkazu. Spark provádí operace v tomto pořadí: zhutnění v zásobníku → Z-řádu → V-řádu.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2) VORDER
V-pořadí chování během času OPTIMIZE závisí na tom, jak příkaz vyvoláte:
| Vyvolání | Behavior |
|---|---|
OPTIMIZE table VORDER |
Nutí V-order u přepsaných souborů bez ohledu na nastavení relace nebo tabulky. |
OPTIMIZE table (bez VORDER klíčového slova) |
Dědí V-pořadí chování z pokud TBLPROPERTIES("delta.parquet.vorder.enabled") je nastaveno, jinak se vrací ke konfiguraci spark.sql.parquet.vorder.defaultrelace . |
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).
OPTIMIZE FULL
Standard OPTIMIZE nepřeskupuje soubory, které jsou už považovány za shlukované. Když změníte klíče clusterování nebo poskytovatele clusteringu, stávající soubory si ponechají své původní uspořádání clusteringu, takže nové dotazy nemají prospěch z aktualizované strategie.
OPTIMIZE FULL vynucuje úplné opětovné shlukování celé tabulky. Znovu shlukuje každý soubor – včetně souborů, které byly dříve seskupeny s jinými klíči nebo poskytovatelem – takže celá tabulka odráží nejnovější strategii shlukování.
Poznámka:
OPTIMIZE FULLje dostupný od běhu Fabric Spark 2.0 (Delta 4.2).
Použijte OPTIMIZE FULL, když:
- Změňte shlukovací sloupce na tabulce s kapalnými shluky.
- Migrujte tabulku mezi platformami nebo poskytovateli clusteringu.
OPTIMIZE dbo.table_name FULL
Protože OPTIMIZE FULL dokáže přepsat většinu nebo celou velkou tabulku, může být výrazně dražší než běžná inkrementální OPTIMIZE. Spusťte ho záměrně, obvykle jednou po změně strategie shlukování, ne jako součást rutinní údržby.
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ů. Zvyšte hodnotu, aby byla konzervativnější v tom, jak často se při optimalizaci přeskakují intervaly, nebo snižte hodnotu, aby se umožnilo přeskočení více přihrádek.
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ů
Fast optimize vyhodnocuje každý bin malých souborů a slučuje pouze ty biny, u nichž je pravděpodobné, že 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')
Snížit režii vyhodnocování
Počínaje verzí Fabric Spark runtime 2.0 (Delta 4.1) můžete povolit režim onCheckpointOnly automatické kompakce. Ve výchozím nastavení automatické komprimace vyhodnocuje metadata souboru po každé operaci zápisu, aby bylo možné určit, jestli tabulka obsahuje příliš mnoho malých souborů. S onCheckpointOnly se vyhodnocení odkládá na operace vytváření kontrolních bodů protokolu (obvykle po každých 10 potvrzeních transakcí). V době kontrolního bodu je snímek tabulky již plně rekonstruován, takže vyhodnocení čte z metadat, která už jsou v paměti, a nevyžadují další kontrolu. Odložené vyhodnocování snižuje režii při každém commitu a zároveň zajišťuje, že tabulky jsou pravidelně kompaktovány.