Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A Delta-táblafájlok idővel töredezetté válnak. A töredezettség növeli a fájlművelet többletterhelését, csökkenti a tömörítés hatékonyságát, és korlátozhatja az olvasó párhuzamosságát. A tömörítés sok kis fájlt átír kevesebb megfelelő méretű fájlba, hogy a Spark hatékonyabban tudja olvasni és feldolgozni az adatokat.
A OPTIMIZE parancs az elsődleges tömörítési művelet. A kis fájlokat az ideális fájlméretet megcélzó rekeszekbe csoportosítja, majd újraírja őket a tárolóra.
Az SQL Analytics-végpont, a Power BI Direct Lake és a Spark tömörítési stratégiáival kapcsolatos, munkaterhelések közötti útmutatásért lásd: Táblakarbantartás és -optimalizálás munkaterhelések között.
Tömörítési módszerek
A Fabric több megközelítést kínál az optimális fájlméretek fenntartására a Delta táblákban:
OPTIMIZE parancs
A OPTIMIZE parancs a Delta-táblák tömörítésének alapművelete. A deltatáblák adatelrendezésének javítása érdekében a kisebb fájlokat nagyobb fájlokba írja át.
| Ingatlan | Description | Alapértelmezett érték | Munkamenet-konfiguráció |
|---|---|---|---|
| minFileSize | Az ennél a küszöbértéknél kisebb fájlok csoportosítva lesznek, és nagyobb fájlokként lesznek újraírva. | 1073741824 (1 GB) | spark.databricks.delta.optimize.minFileSize |
| maxFileSize | A parancs által OPTIMIZE létrehozott célfájlméret. |
1073741824 (1 GB) | spark.databricks.delta.optimize.maxFileSize |
OPTIMIZE idempotens, de egy túlméretezett minFileSize növelheti az írási erősítést. Ha például minFileSize 1 GB-ra van állítva, egy 900 MB-os fájl egy kis plusz írás után újraírható. Az automatikus fájlméret-kezelési útmutatásért tekintse meg az adaptív célfájlméretet.
OPTIMIZE a Z-Orderral
Ha a ZORDER BY záradékot használja, a OPTIMIZE átírja az aktív fájlokat úgy, hogy a hasonló értékeket tartalmazó sorok ugyanabban a fájlban kerüljenek elhelyezésre. Az együtt elhelyezett elrendezés javítja a fájlok kihagyását a szelektív szűrők esetén. A Z-Order használata a következő esetekben:
- A lekérdezések gyakran együtt két vagy több oszlopra szűrnek (például dátum + ügyfél_azonosító), és
- Ezek a predikátumok elég szelektívek ahhoz, hogy a fájlszintű kihagyás csökkenti a beolvasott fájlok számát.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2)
OPTIMIZE V-rendű
Ez a VORDER záradék eredményeként a tömörítésre kijelölt fájlok V-rendű optimalizálást alkalmaznak. További információkért a V-rendről lásd a részletes dokumentációt.
OPTIMIZE dbo.table_name VORDER
Egyesítheted a Z-Order és V-Order egyetlen parancsot. A Spark a következő sorrendben alkalmazza a műveleteket: bin tömörítés → Z-Order → V-order.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2) VORDER
A V-rendű viselkedés a parancs közben OPTIMIZE attól függ, hogyan hívod meg a parancsot:
| Könyörgés | Magatartás |
|---|---|
OPTIMIZE table VORDER |
V-sorrendet kényszerít az átírt fájlokra, függetlenül a session vagy tábla beállításoktól. |
OPTIMIZE table (nincs VORDER kulcsszó) |
Ha be van állítva, a TBLPROPERTIES("delta.parquet.vorder.enabled") elemről örökli a V-order viselkedést, ellenkező esetben a munkamenet-konfigurációban megadott spark.sql.parquet.vorder.default értékre áll vissza. |
OPTIMIZE folyékony fürtözéssel
A folyékony fürtözés táblabeállításként van megadva; további információt a folyékony fürtözés engedélyezését ismertető cikkben talál. Ha a folyékony fürtözés engedélyezve van, OPTIMIZE végrehajtja a fürtkezelési szabályzatot alkalmazó fizikai átírást.
Fontos
Az adatok csak akkor lesznek fürtözve, ha a OPTIMIZE folyékony klaszterezés engedélyezett táblákon fut. A normál írási műveletek NEM csoportosítják az adatokat. Az olyan tömörítési stratégia, mint az automatikus tömörítés vagy az optimalizálási feladatok manuális ütemezése, kritikus fontosságú annak biztosítása érdekében, hogy a fürtözött adatok előnyei (vagyis a továbbfejlesztett Delta-fájlok kihagyása) megvalósíthatók legyenek.
OPTIMIZE FULL
A Standard OPTIMIZE nem reklasterezi azokat fájlokat, amelyek már klaszterezettnek számítanak. Amikor megváltoztatod a klaszterkulcsokat vagy a klaszterszolgáltatót, a meglévő fájlok megtartják korábbi klaszterezésüket, így az új lekérdezések nem profitálnak a frissített stratégiából.
OPTIMIZE FULL kikényszeríti a teljes táblára kiterjedő újraklaszterezési lefutást. Minden fájlt újracsoportozik – beleértve azokat a fájlokat is, amelyeket korábban különböző kulcsokkal vagy szolgáltatóval csoportosítottak –, így az egész tábla tükrözi a legújabb klaszterezési stratégiát.
Megjegyzés:
OPTIMIZE FULL a Fabric Spark-futtatókörnyezet 2.0-s verziójától (Delta 4.2) érhető el.
Használd OPTIMIZE FULL , ha:
- Változtasd meg a klaszterező oszlopokat egy folyadékcsoportos táblázaton.
- Migráljon egy táblát platformok vagy klaszterszolgáltatók között.
OPTIMIZE dbo.table_name FULL
Mivel OPTIMIZE FULL egy nagy tábla nagy részét vagy egészét át lehet írni, ez jelentősen drágább lehet, mint egy sima inkrementális OPTIMIZE. Indítsd szándékosan a gépet, általában egyszer a klaszterezési stratégia megváltoztatása után, nem pedig a rutin karbantartás részeként.
Gyors optimalizálás
A gyors optimalizálás intelligensen elemzi a Delta-táblafájlokat, és kihagyja azokat a tömörítési műveleteket, amelyek nem valószínű, hogy jelentősen javítják a teljesítményt.
Ahelyett, hogy vakon tömöríti a fájlokat, amikor kis fájlok léteznek, a gyors optimalizálás kiértékeli, hogy minden egyes jelölt tároló (kis fájlok csoportja) megfelel-e a konfigurálható ajánlott eljárás tömörítési céljainak. A gyors optimalizálási eljárás csak akkor futtat tömörítést egy fájlcsoporton, ha az egyesítés várhatóan eléri a minimális célméretet, vagy ha túl sok kis fájl van. Ellenkező esetben kihagyja a csoportot, vagy csökkenti a tömörített fájlok számát.
A gyors optimalizálás a tömörítési elvárásoknak megfelelően finomhangolható:
| Ingatlan | Description | Alapértelmezett érték | Munkamenet-konfiguráció |
|---|---|---|---|
| minNumFiles | Azon kis fájlok száma, amelyeknek egy tárolóban kell létezniük az optimalizáláshoz, ha a tároló nem tartalmaz elegendő adatot a tömörített fájlok létrehozásához. | 50 | spark.microsoft.delta.optimize.fast.minNumFiles |
| parquetCoefficient | Megszorozva az optimalizálási környezet minimális fájlméretével annak meghatározásához, hogy a tárolóban a tömörítés hatókörébe belefoglalandó kis méretű fájladatoknak minimálisnak kell lenniük. | 1.3 | spark.microsoft.delta.optimize.fast.parquetCoefficient |
Megjegyzés:
A parquetCoefficient tároló célmérete nagyobb, mint az optimalizált környezet minimális célfájlmérete. Ez az együttható azt a valóságot adja, hogy több kis parquet-fájl kombinálása jobb tömörítést eredményez, így kevesebb adatot, mint a kis fájlok összege. Növelje az értéket, hogy konzervatívabb legyen a gyűjtők kihagyásának gyors optimalizálása során, vagy csökkentse az értéket, hogy megengedőbb legyen a tárolók kihagyása.
Hogyan működik?
A gyors optimalizálás további ellenőrzéseket vezet be a tárolók tömörítése előtt. Az egyes jelölt tárolóknál a gyors optimalizálás a következőket értékeli:
- A tárolóban lévő nyers adatok becsült mennyisége (kis fájlméretek összege)
- Azt mutatja, hogy a kis fájlok egyesítése úgy becsülik, hogy egy olyan fájlt eredményez, amely megfelel a beállított minimális célméretnek.
- Azt jelzi, hogy a tároló legalább a kis méretű fájlok konfigurált minimális számát tartalmazza-e
A Fast optimize kiértékeli a kis fájlok egyes gyűjtőit, és csak azokat tömöríti, amelyek várhatóan elérik a minimális célméretet, vagy meghaladják a minimális fájldarabszámot. Azok a tárolók, amelyek nem felelnek meg ezeknek a küszöbértékeknek, kihagyva vagy részlegesen tömörítve lesznek. A nem optimális tárolók kihagyása csökkenti a szükségtelen átírásokat, csökkenti az íráserősséget, és idempotensebbé teszi az OPTIMIZE-feladatokat.
Megjegyzés:
A pontos megvalósítás idővel változhat.
A gyors optimalizálás csökkentheti az újraírt adatokat a Delta-táblák életciklusán keresztül. Ahogy az alábbi ábrán is látható, a gyors optimalizálás kihagyja a nem optimális tárolóegységeket, ami gyorsabb és idempotensebb OPTIMIZE feladatokat eredményez kevesebb íráserősítéssel.
Képernyőkép, amely bemutatja, hogy a gyors optimalizálás hogyan eredményez kevesebb adatátírást idővel.
Megjegyzés:
Csak illusztrációs célokra a fenti diagramok feltételezik, hogy a tömörítésből írt fájl mérete a kis fájlok méretének összege. Ez azt is jelenti, hogy parquetCoefficient értéke 1.
Korlátozások
- Nem alkalmazható folyékony fürtözési és Z-Order-műveletekre
- A gyors optimalizálás nem módosítja az automatikus tömörítés viselkedését
Fájlszintű tömörítési célok
A korábban tömörítettnek (elég nagynak) tekintett adatok átírásának elkerülése érdekében a tömörítési minimális és a maximális fájlméret-célértékek módosítása alapján engedélyezhető a spark.microsoft.delta.optimize.fileLevelTarget.enabled már tömörített fájlok újrakompaticiójának megakadályozása. Ha engedélyezve van, a fájlok nem lesznek újrakomponálva, ha korábban a tömörítéskor legalább a célfájl méretének felét tették ki. A fájlszintű célok fenntartása minimálisra csökkenti az íráserősítést, mivel a tömörítési cél mérete idővel változik (például az adaptív célfájlméret kiértékelése és egy nagyobb cél beállítása esetén). Ha engedélyezve van, a rendszer hozzáadja a OPTIMIZE_TARGET_SIZE címkét az új fájlokhoz az OPTIMIZE futtatásakor, illetve bármilyen írási művelethez, ha a tábla vagy delta.targetFileSize a delta.targetFileSize.adaptive tulajdonság be van állítva.
Megjegyzés:
Bár alapértelmezés szerint nincs engedélyezve, a Microsoft azt javasolja, hogy engedélyezze a fájlszintű tömörítési célokat a lehetséges íráserősítés korlátozásához.
Automatikus tömörítés
Az automatikus tömörítés minden írási művelet után kiértékeli a partíció állapotát. Ha túlzott fájltöredezettséget (túl sok kis fájlt) észlel egy partíción belül, azonnal elindít egy szinkron OPTIMIZE műveletet az írás véglegesítése után. A fájlkarbantartás ezen íróalapú megközelítése optimális, mivel a tömörítés csak akkor fut, ha programozott módon hasznosnak bizonyul.
Engedélyezés munkamenet szintjén
Állítsa be spark.databricks.delta.autoCompact.enabled a munkamenet szintjén, hogy engedélyezze az automatikus tömörítést az adott Spark-munkamenetben létrehozott új táblákhoz:
Engedélyezés táblaszinten
Táblatulajdonság delta.autoOptimize.autoCompact beállítása adott táblák automatikus tömörítésének engedélyezéséhez:
CREATE TABLE dbo.table_name
TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
Tábla létrehozásakor a DataFrameWriter beállítással delta.autoOptimize.autoCompact engedélyezheti az automatikus tömörítést:
df.write.option('delta.autoOptimize.autoCompact', 'true').saveAsTable('dbo.table_name')
Engedélyezze ugyanazt a táblatulajdonságot egy meglévő táblán:
ALTER TABLE dbo.table_name
SET TBLPROPERTIES ('delta.autoOptimize.autoCompact' = 'true')
A kiértékelési többletterhelés csökkentése
A Fabric Spark runtime 2.0-tól (Delta 4.2) kezdve engedélyezheted az onCheckpointOnly automatikus tömörítési módot. Az automatikus tömörítés alapértelmezés szerint minden írási művelet után kiértékeli a fájl metaadatait annak megállapításához, hogy egy tábla túl sok kis fájllal rendelkezik-e.
onCheckpointOnly esetén a kiértékelés az ellenőrzőpont-kezelési műveletek naplózásáig halasztódik el (általában 10 commitonként). Az ellenőrzőpont-időpontban a táblázat pillanatképe már teljesen rekonstruálva van, így az értékelés a memóriában lévő metaadatokból olvassa be ahelyett, hogy extra vizsgálatot igényel. A halasztott értékelés csökkenti a véglegesítésenkénti többletterhelést, miközben továbbra is biztosítja a táblák rendszeres tömörítését.