Zhutňovacie stoly Delta

Delta tabuľkové súbory sa časom fragmentujú. Fragmentácia zvyšuje režijné náklady na operácie súborov, znižuje efektivitu kompresie a môže obmedziť paralelizmus čítania. Compaction prepíše mnoho malých súborov na menej súborov správnej veľkosti, aby Spark mohol efektívnejšie čítať a spracovávať dáta.

Príkaz OPTIMIZE je primárnou operáciou kompaktácie. Zoskupuje malé súbory do binov s cieľom ideálnej veľkosti súboru a potom ich prepíše do storage.

Pre usmernenia pre stratégie kompaktácie naprieč záťažami naprieč SQL Analytics Endpoint, Power BI Direct Lake a Spark pozri Údržba a optimalizácia tabuliek naprieč záťažami.

Metódy zhutňovania

Microsoft Fabric ponúka niekoľko prístupov na udržanie optimálnej veľkosti súborov v tabuľkách Delta:

OPTIMIZE príkaz

Príkaz OPTIMIZE je základnou operáciou na zhutnenie tabuliek Delta. Prepíše malé súbory do väčších súborov, aby sa zlepšilo rozloženie údajov v tabuľkách Delta.

OPTIMIZE dbo.table_name
Vlastnosť Description Predvolená hodnota Konfigurácia relácie
minVeľkosť súboru Súbory, ktoré sú menšie ako táto prahová hodnota, sa zoskupia a prepíšu ako väčšie súbory. 1073741824 (1 GB) spark.databricks.delta.optimize.minFileSize
maxFileSize Cieľová veľkosť súboru vytvorená príkazom OPTIMIZE . 1073741824 (1 GB) spark.databricks.delta.optimize.maxFileSize

OPTIMIZE je idempotentný, ale oversized minFileSize môže zvýšiť zosilnenie zápisu. Napríklad pri minFileSize nastavení na 1 GB môže byť súbor s veľkosťou 900 MB prepísaný po malom dodatočnom zápise. Pre rady o automatickej správe veľkosti súborov pozri adaptívnu cieľovú veľkosť súboru.

OPTIMIZE s Z-Order

Keď použijete klauzulu ZORDER BY , prepíše aktívne súbory tak, OPTIMIZE že riadky s podobnými hodnotami sú umiestnené v rovnakých súboroch. Kolokované rozloženie zlepšuje preskakovanie súborov pri selektívnych filtroch. Použite Z-Order, keď:

  • Dotazy často filtrujú dva alebo viacero stĺpcov naraz (napríklad dátum + customer_id) a
  • Tieto predikáty sú dostatočne selektívne, že preskakovanie na úrovni súborov znižuje počet skenovaných súborov.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2)

OPTIMIZE s V-Order

Klauzula VORDER má za následok, že súbory vyhradené na zhutnenie majú aplikovanú optimalizáciu V-Order. Viac informácií o V-Order nájdete v podrobnej dokumentácii.

OPTIMIZE dbo.table_name VORDER

Z-Order a V-Order môžete spojiť v jednom príkaze. Spark aplikuje operácie v tomto poradí: zhutnenie bin → Z-rád → V-rád.

OPTIMIZE dbo.table_name ZORDER BY (column1, column2) VORDER

Správanie V-Order počas závisí OPTIMIZE od toho, ako príkaz vyvoláte:

Invokácia Správanie
OPTIMIZE table VORDER Núti V-Order na prepísaných súboroch, bez ohľadu na nastavenia relácie alebo tabuľky.
OPTIMIZE table (bez VORDER kľúčového slova) Dedí správanie V-Order z ak TBLPROPERTIES("delta.parquet.vorder.enabled") je nastavené, inak sa vracia k konfigurácii spark.sql.parquet.vorder.defaultrelácie .

OPTIMIZE so zhlukovaním kvapalín

Zhlukovanie kvapalín je špecifikované ako možnosť tabuľky; Podrobnosti nájdete v časti Povolenie zhlukovania tekutín . Keď je povolené zhlukovanie tekutín, vykoná fyzické prepísanie, OPTIMIZE ktoré použije politiku klastrovania.

Dôležité

Údaje sú klastrované iba vtedy, keď OPTIMIZE sa spúšťajú v tabuľkách s povoleným klastrovaním kvapaliny. Bežné operácie zápisu NEZOSKUPUJÚ údaje. Stratégia zhutňovania, ako je používanie automatického zhutňovania alebo manuálne plánovanie optimalizácie úloh, je rozhodujúca na zabezpečenie toho, aby bolo možné realizovať výhody klastrovaných údajov (t. j. vylepšené preskakovanie súborov Delta).

OPTIMIZE FULL

Standard OPTIMIZE nezoskupuje súbory, ktoré sú už považované za zhlukované. Keď zmeníte kľúče klastrovania alebo poskytovateľa klastrovania, existujúce súbory si ponechajú svoje predchádzajúce usporiadanie, takže nové dotazy neprofitujú z aktualizovanej stratégie.

OPTIMIZE FULL vynúti celostolové pretriedenie. Zhlukuje každý súbor – vrátane súborov, ktoré boli predtým zoskupené s inými kľúčmi alebo iným poskytovateľom – takže celá tabuľka odráža najnovšiu stratégiu zhlukovania.

Poznámka

OPTIMIZE FULLje dostupný od runtime Fabric Spark 2.0 (Delta 4.2).

Používajte OPTIMIZE FULL , keď:

  • Zmeňte stĺpce zhlukovania na stole s kvapalnými zhlukmi.
  • Migrujte tabuľku medzi platformami alebo poskytovateľmi klastrovania.
OPTIMIZE dbo.table_name FULL

Keďže OPTIMIZE FULL dokáže prepísať väčšinu alebo celú veľkú tabuľku, môže byť podstatne drahšia ako bežná inkrementálna OPTIMIZE. Spustite ho zámerne, zvyčajne raz po zmene stratégie zhlukovania, nie ako súčasť rutinnej údržby.

Rýchla optimalizácia

Rýchla optimalizácia inteligentne analyzuje súbory tabuliek Delta a preskakuje operácie zhutňovania, ktoré pravdepodobne zmysluplne nezlepšia výkon.

Namiesto slepého zhutňovania súborov vždy, keď existujú malé súbory, rýchla optimalizácia vyhodnotí, či každý kandidátsky zásobník (skupina malých súborov) spĺňa konfigurovateľné ciele zhutňovania osvedčených postupov. Rýchla optimalizácia spustí zhutnenie zásobníka súborov iba vtedy, ak je pravdepodobné, že ich zlúčenie dosiahne minimálnu cieľovú veľkosť alebo ak je príliš veľa malých súborov. V opačnom prípade túto skupinu preskočí alebo zníži počet súborov, ktoré zhutní.

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

Rýchlu optimalizáciu je možné doladiť na základe vašich očakávaní zhutnenia:

Vlastnosť Description Predvolená hodnota Konfigurácia relácie
minNumFiles Počet malých súborov, ktoré musia existovať v zásobníku, aby sa optimalizácia vykonala, ak zásobník neobsahuje dostatok údajov odhadovaných na vytvorenie zhutneného súboru. 50 spark.microsoft.delta.optimize.fast.minNumFiles
parketový koeficient Vynásobené minimálnou veľkosťou súboru optimalizácie kontextu, aby sa určilo minimálne množstvo malých údajov, ktoré musia existovať v zásobníku, aby bol zásobník zahrnutý do rozsahu zhutnenia. 1.3 spark.microsoft.delta.optimize.fast.parquetCoefficient

Poznámka

Výsledkom parquetCoefficient je, že cieľová veľkosť priehradky je väčšia ako minimálna veľkosť cieľového súboru optimalizovaného kontextu. Tento koeficient zohľadňuje skutočnosť, že kombinácia viacerých malých parketových súborov vedie k lepšej kompresii, a teda k menšiemu množstvu údajov ako súčet malých súborov. Zvýšte hodnotu, aby ste boli konzervatívnejší v tom, ako často rýchlo optimalizujte preskakovacie priečinky, alebo znížiť hodnotu, aby ste umožnili viac povoleného preskakovania zásobníkov.

Ako to funguje

Rýchla optimalizácia zavádza dodatočné kontroly pred zhutnením zásobníkov. Pre každý kôš kandidátov rýchla optimalizácia vyhodnocuje:

  • Odhadované množstvo nespracovaných údajov v priehradke (súčet malých veľkostí súborov)
  • Či sa odhaduje, že kombinácia malých súborov vytvorí súbor spĺňajúci nakonfigurovanú minimálnu cieľovú veľkosť
  • Či kôš obsahuje aspoň nakonfigurovaný minimálny počet malých súborov

Rýchla optimalizácia vyhodnocuje každý box malých súborov a kompaktuje len tie biny, ktoré pravdepodobne dosiahnu minimálnu cieľovú veľkosť alebo prekročia minimálny počet súborov. Koše, ktoré nespĺňajú tieto prahové hodnoty, sa vynechajú alebo čiastočne zhutnia. Vynechanie neoptimálnych priehradiek znižuje zbytočné prepisovanie, znižuje zosilnenie zápisu a zvyšuje idempotenciu úloh OPTIMIZE.

Snímka obrazovky znázorňujúca, ako rýchlo optimalizácia vyhodnocuje, či je priehradka zhutnená.

Poznámka

Presná implementácia sa môže časom vyvíjať.

Rýchla optimalizácia môže znížiť počet prepísaných dát počas životného cyklu tabuľky Delta. Ako je znázornené na nasledujúcom diagrame, rýchla optimalizácia preskakuje suboptimálne biny, čo vedie k rýchlejším a idempotentnejším OPTIMIZE úlohám s menším zosilnením zápisu.

Snímka obrazovky znázorňujúca, ako rýchla optimalizácia vedie k menšiemu počtu prepisovania údajov v priebehu času.

Poznámka

Len na ilustračné účely vyššie uvedené diagramy predpokladajú, že veľkosť súboru zapísaného zo zhutnenia je súčtom veľkosti malých súborov. Znamená to tiež číslo parquetCoefficient 1.

Obmedzenia
  • Nevzťahuje sa na zhlukovanie kvapalín a operácie Z-Order
  • Rýchla optimalizácia nemení správanie automatického zhutňovania

Ciele zhutnenia na úrovni súborov

Aby sa predišlo prepisovaniu údajov, ktoré sa predtým považovali za zhutnené (dostatočne veľké) na základe zmeny cieľovej minimálnej a maximálnej veľkosti súboru, je možné povoliť, spark.microsoft.delta.optimize.fileLevelTarget.enabled aby sa zabránilo opätovnému zhutneniu už zhutnených súborov. Ak je táto možnosť povolená, súbory sa nekomprimujú, ak predtým spĺňali aspoň polovicu cieľovej veľkosti súboru v čase zhutnenia. Udržiavanie cieľov na úrovni súboru minimalizuje zosilnenie zápisu, keď sa veľkosť cieľovej kompakcie mení v priebehu času (napríklad pri adaptívnej veľkosti cieľového súboru, ktorá vyhodnocuje a nastavuje väčší cieľ). Ak je povolená, značka OPTIMIZE_TARGET_SIZE sa pridá do nových súborov pri spustení funkcie OPTIMIZE alebo pri akejkoľvek operácii zápisu, ak je nastavená vlastnosť delta.targetFileSize alebo delta.targetFileSize.adaptive table.

Poznámka

Aj keď to nie je predvolene povolené, spoločnosť Microsoft odporúča povoliť ciele zhutňovania na úrovni súborov , aby sa obmedzilo potenciálne zosilnenie zápisu.

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

Automatické zhutňovanie

Automatické zhutnenie vyhodnocuje stav oddielu po každej operácii zápisu. Keď zistí nadmernú fragmentáciu súborov (príliš veľa malých súborov) v rámci oddielu, spustí synchrónnu OPTIMIZE operáciu ihneď po potvrdení zápisu. Tento prístup k údržbe súborov riadený zapisovačom je optimálny, pretože zhutnenie sa vykonáva iba vtedy, keď sa programovo určí ako prospešné.

Povolenie na úrovni relácie

Nastavte spark.databricks.delta.autoCompact.enabled na úrovni relácie tak, aby ste povolili automatickú kompakciu pre nové tabuľky vytvorené v tejto Spark relácii:

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

Povoliť na úrovni tabuľky

Nastavte vlastnosť delta.autoOptimize.autoCompact tabuľky na umožnenie automatickej kompakcie pre konkrétne tabuľky:

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

Použite možnosť delta.autoOptimize.autoCompact DataFrameWriter na povolenie automatickej kompakcie pri vytváraní tabuľky:

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

Povolte rovnakú vlastnosť tabuľky na existujúcej tabuľke:

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

Zníženie nákladov na hodnotenie

Od Fabric Spark runtime 2.0 (Delta 4.1) môžete povoliť režim automatickej kompakcie onCheckpointOnly. Automatická kompakcia štandardne vyhodnocuje metadáta súborov po každej operácii zápisu, aby zistila, či má tabuľka príliš veľa malých súborov. Pri , vyhodnotenie sa odkladá na operácie onCheckpointOnlylogovania checkpointov (typicky každých 10 commitov). V čase kontrolného bodu je snímka tabuľky už úplne rekonštruovaná, takže vyhodnotenie číta z metadát, ktoré sú už v pamäti, namiesto toho, aby bolo potrebné ďalšie skenovanie. Odložené vyhodnotenie znižuje režijné náklady na jeden commit a zároveň zabezpečuje, že tabuľky sú periodicky kompaktné.

SET spark.microsoft.delta.autoCompact.onCheckpointOnly.enabled = TRUE