Delta-pöytien tiivistäminen

Delta-taulukon tiedostot hajoavat ajan myötä. Fragmentaatio lisää tiedostotoiminnan ylikuormitusta, heikentää pakkaustehokkuutta ja voi rajoittaa lukijan rinnakkaisuutta. Pakkaus kirjoittaa monia pieniä tiedostoja uudelleen harvemmiksi, oikean kokoisiksi tiedostoiksi, jotta Spark voi lukea ja käsitellä dataa tehokkaammin.

Komento OPTIMIZE on ensisijainen tiivistymisoperaatio. Se ryhmittelee pienet tiedostot bineihin, jotka tähtäävät ihanteelliseen tiedostokokoon, ja kirjoittaa ne sitten uudelleen storage-tilaan.

Ristintyökuorman ohjausta tiivistämisstrategioista SQL Analytics Endpointissa, Power BI Direct Lakessa ja Sparkissa löytyy kohdasta Cross-workload table maintenance and optimization.

Tiivistysmenetelmät

Microsoft Fabric tarjoaa useita tapoja ylläpitää optimaalisia tiedostokokoja Delta-taulukoissa:

OPTIMIZE komento

Komento OPTIMIZE on Delta-taulukoiden tiivistämisen perustoiminto. Se kirjoittaa pienet tiedostot uudelleen suuremmiksi tiedostoiksi parantaakseen Delta-taulukoiden tietojen asettelua.

OPTIMIZE dbo.table_name
Ominaisuus Kuvaus Oletusarvo Istunnon määritys
minFileSize Tätä raja-arvoa pienemmät tiedostot ryhmitellään yhteen ja kirjoitetaan uudelleen suuremmiksi tiedostoiksi. 1073741824 (1 GB) spark.databricks.delta.optimize.minFileSize
maxFileSize Komennon tuottama OPTIMIZE kohdetiedoston koko. 1073741824 (1 GB) spark.databricks.delta.optimize.maxFileSize

OPTIMIZE on idempotentti, mutta ylisuurikokoinen minFileSize voi lisätä kirjoitusvahvistusta. Esimerkiksi, kun minFileSize tiedosto on asetettu 1 GB:ksi, 900 MB tiedosto voidaan kirjoittaa uudelleen pienen ylimääräisen kirjoituksen jälkeen. Automaattisen tiedostokoon hallinnan ohjeita löytyy kohdasta adaptiivinen kohdetiedoston koko.

OPTIMIZE Z-Orderilla

Kun käytät lauseketta ZORDER BY , OPTIMIZE aktiiviset tiedostot kirjoitetaan uudelleen niin, että samanarvoiset rivit ovat samassa tiedostossa. Samanaikainen asettelu parantaa tiedostojen ohittamista valikoivissa suodattimissa. Käytä Z-Orderia, kun:

  • Kyselyt suodattavat usein kahta tai useampaa saraketta yhdessä (esimerkiksi päivämäärä + customer_id) ja
  • Nämä predikaatit ovat riittävän valikoivia, jotta tiedostotason ohittaminen vähentää tarkistettujen tiedostojen määrää.
OPTIMIZE dbo.table_name ZORDER BY (column1, column2)

OPTIMIZE V-Orderilla

Lauseke VORDER johtaa siihen, että tiivistämiseen tarkoitetuissa tiedostoissa käytetään V-Order-optimointia. Lisätietoja V-Orderista on yksityiskohtaisessa dokumentaatiossa.

OPTIMIZE dbo.table_name VORDER

Voit yhdistää Z-Orderin ja V-Orderin yhteen komentoon. Spark soveltaa operaatioita tässä järjestyksessä: binin tiivistäminen → Z-järjestys → V-järjestys.

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

V-Orderin käyttäytyminen riippuu OPTIMIZE siitä, miten kutsut komennon:

Invokaatio Toimintatapa
OPTIMIZE table VORDER Pakottaa V-järjestyksen uudelleenkirjoitetuissa tiedostoissa, riippumatta istunto- tai taulukoasetuksista.
OPTIMIZE table (ei VORDER avainsanaa) Perii V-Orderin käyttäytymisen, TBLPROPERTIES("delta.parquet.vorder.enabled") jos se on asetettu, muuten palautuu istuntokonfiguraatioon spark.sql.parquet.vorder.default.

OPTIMIZE Nesteklusterointi

Nesteklusterointi on määritetty taulukkovaihtoehtona; Katso lisätietoja kohdasta Liquid-klusteroinnin ottaminen käyttöön . Kun liquid-klusterointi on käytössä, OPTIMIZE suorittaa fyysisen uudelleenkirjoituksen, joka käyttää klusterointikäytäntöä.

Tärkeää

Tiedot klusteroidaan vain, kun OPTIMIZE ne suoritetaan Liquid-klusteroiduissa taulukoissa. Tavalliset kirjoitustoiminnot EIVÄT klusteroi tietoja. Tiivistysstrategia, kuten automaattisen tiivistyksen käyttäminen tai optimointitöiden manuaalinen ajoittaminen, on ratkaisevan tärkeää, jotta klusteroitujen tietojen edut (eli parannettu Delta-tiedostojen ohittaminen) voidaan toteuttaa.

Nopea optimointi

Nopea optimointi analysoi älykkäästi Delta-taulukkotiedostoja ja ohittaa tiivistystoiminnot, jotka eivät todennäköisesti paranna suorituskykyä merkittävästi.

Sen sijaan, että tiedostoja tiivistettäisiin sokeasti aina, kun pieniä tiedostoja on olemassa, nopea optimointi arvioi, täyttääkö kukin ehdokaslokero (pienten tiedostojen ryhmä) määritettävissä olevat parhaiden käytäntöjen tiivistystavoitteet. Fast Optimize suorittaa tiivistämisen tiedostovarastossa vain, jos niiden yhdistäminen todennäköisesti saavuttaa vähimmäistavoitekoon tai jos pieniä tiedostoja on liikaa. Muussa tapauksessa se ohittaa kyseisen ryhmän tai vähentää tiivistämiensä tiedostojen määrää.

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

Nopeaa optimointia voidaan hienosäätää tiivistysodotusten perusteella:

Ominaisuus Kuvaus Oletusarvo Istunnon määritys
minNumFiles Niiden pienten tiedostojen määrä, joiden on oltava varastopaikassa, jotta optimointi voidaan suorittaa, jos varastopaikka ei sisällä tarpeeksi tietoja, joiden on arvioitu tuottavan tiivistetyn tiedoston tuottamiseksi. 50 spark.microsoft.delta.optimize.fast.minNumFiles
parkettiKerroin Kerrottuna optimoi kontekstin vähimmäistiedostokoko, jotta voidaan määrittää pienten tiedostotietojen vähimmäismäärä, jonka varastopaikassa on oltava, jotta varastopaikka voidaan sisällyttää tiivistämisen piiriin. 1.3 spark.microsoft.delta.optimize.fast.parquetKerroin

Note

Tuloksena parquetCoefficient on, että varastopaikan kohdekoko on suurempi kuin optimointikontekstin kohdetiedoston vähimmäiskoko. Tämä kerroin selittää sen tosiasian, että useiden pienten parquet-tiedostojen yhdistäminen johtaa parempaan pakkaukseen ja siten vähemmän dataa kuin pienten tiedostojen summa. Nosta arvoa ollaksesi konservatiivisempi siinä, kuinka nopeasti optimoidaan binit ohi, tai laske arvoa, jotta binien ohittaminen olisi sallivampi.

Miten se toimii

Nopea optimointi ottaa käyttöön ylimääräisiä tarkistuksia ennen varastopaikkojen tiivistämistä. Nopea optimointi arvioi kullekin ehdokaslokerolle:

  • Varastopaikassa olevan raakadatan arvioitu määrä (pienten tiedostokokojen summa)
  • Onko pienten tiedostojen yhdistämisen arvioitu tuottavan tiedoston, joka täyttää määritetyn vähimmäistavoitekoon
  • Sisältääkö varastopaikka vähintään määritetyn vähimmäismäärän pieniä tiedostoja

Fast Optimize arvioi jokaisen pienten tiedostojen binin ja tiivistää vain ne binit, jotka todennäköisesti saavuttavat minimitavoitekoon tai ylittävät minimitiedostomäärän. Varastopaikat, jotka eivät täytä näitä raja-arvoja, ohitetaan tai tiivistetään osittain. Epäoptimaalisten lokeroiden ohittaminen vähentää tarpeettomia uudelleenkirjoituksia, vähentää kirjoitusvahvistusta ja tekee OPTIMIZE-töistä idempotentimpia.

Näyttökuva, joka näyttää, kuinka nopeasti optimointi arvioi, jos varastopaikka on tiivistetty.

Note

Tarkka toteutus voi kehittyä ajan myötä.

Nopea optimointi voi vähentää uudelleenkirjoitettua dataa Delta-taulun elinkaaren aikana. Kuten seuraavassa kaaviossa näkyy, nopea optimointi ohittaa suboptimaaliset binit, mikä johtaa nopeampiin ja idempotenttimpiin OPTIMIZE töihin, joissa on vähemmän kirjoitusvahvistusta.

Näyttökuva, joka näyttää, kuinka nopeasti optimointi vähentää tietojen uudelleenkirjoitusta ajan myötä.

Note

Yllä olevissa kaavioissa oletetaan, että tiivistämällä kirjoitetun tiedoston koko on pienten tiedostojen koon summa. Se tarkoittaa myös 1:tä parquetCoefficient .

Rajoitukset
  • Ei koske liquid-klusterointia ja Z-Order-toimintoja
  • Nopea optimointi ei muuta automaattisen tiivistämisen toimintaa

Tiedostotason tiivistyskohteet

Jos haluat välttää aiemmin pakatuina (riittävän suurina) pidettyjen tietojen uudelleenkirjoittamisen tiedostojen vähimmäis- ja enimmäiskokokohteiden muuttamisen perusteella, spark.microsoft.delta.optimize.fileLevelTarget.enabled voit ottaa käyttöön jo tiivistettyjen tiedostojen uudelleentiivistämisen estämiseksi. Kun tämä on käytössä, tiedostoja ei pakkaa uudelleen, jos ne ovat aiemmin täyttäneet vähintään puolet kohdetiedoston koosta tiivistyshetkellä. Tiedostotason tavoitteiden ylläpito minimoi kirjoitusvahvistuksen, kun tiivistyskohteen koko muuttuu ajan myötä (esimerkiksi adaptiivisen kohdetiedoston koon arvioinnin ja suuremman kohteen asettamisen myötä). Jos tämä on käytössä, tunniste lisätään uusiin tiedostoihin, kun OPTIMIZE suoritetaan, tai mihin tahansa kirjoitustoimintoon, OPTIMIZE_TARGET_SIZE jos delta.targetFileSize tai delta.targetFileSize.adaptive table-ominaisuus on määritetty.

Note

Vaikka se ei ole oletusarvoisesti käytössä, Microsoft suosittelee tiedostotason tiivistyskohteiden käyttöönottoa mahdollisen kirjoitusvahvistuksen rajoittamiseksi.

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

Automaattinen tiivistys

Automaattinen tiivistys arvioi osion kunnon jokaisen kirjoitustoiminnon jälkeen. Kun se havaitsee liiallisen tiedoston pirstoutumisen (liian monta pientä tiedostoa) osiossa, se käynnistää synkronisen OPTIMIZE toiminnon heti kirjoituksen suorittamisen jälkeen. Tämä kirjoittajalähtöinen lähestymistapa tiedostojen ylläpitoon on optimaalinen, koska tiivistys suoritetaan vain, kun se on ohjelmallisesti todettu hyödylliseksi.

Ota käyttöön istuntotasolla

Aseta spark.databricks.delta.autoCompact.enabled istuntotasolle automaattinen tiivistäminen uusille Spark-istunnossa luoduille tauluille:

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

Ota käyttöön taulukkotasolla

Aseta tauluominaisuus delta.autoOptimize.autoCompact automaattisen tiivistymisen mahdollistamiseksi tietyille tauluille:

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

Käytä DataFrameWriter-vaihtoehtoa delta.autoOptimize.autoCompact automaattisen tiivistämisen ottamiseen käyttöön taulua luodessa:

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

Ota sama tauluominaisuus käyttöön olemassa olevassa taulukossa:

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

Vähennä arvioinnin ylikuormitusta

Alkaen Fabric Spark Runtime 2.0:sta (Delta 4.1), voit ottaa käyttöön onCheckpointOnly automaattisen tiivistystilan. Oletuksena automaattinen pakkaus arvioi tiedostometatiedot jokaisen kirjoitusoperaation jälkeen selvittääkseen, onko taulukossa liikaa pieniä tiedostoja. Kun onCheckpointOnly, arviointi siirretään loki-tarkistuspisteoperaatioihin (tyypillisesti joka kymmenes commit). Tarkistuspisteen hetkellä taulukkotilannekuva on jo täysin rekonstruoitu, joten arviointi lukee muistissa olevasta metatiedoista, eikä vaadi ylimääräistä skannausta. Viivästetty arviointi vähentää sitoutumiskohtaista ylikuormitusta samalla kun taulut tiivistetään säännöllisesti.

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