Jaa


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 (1g) spark.databricks.delta.optimize.minFileSize
maxFileSize Komennon tuottama OPTIMIZE kohdetiedoston koko. 1073741824 (1g) 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 lisä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. Tämä 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

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. Tätä arvoa voidaan suurentaa varovaisemmaksi sen suhteen, kuinka usein nopea optimointi ohittaa varastopaikat, tai pienentää, jotta varastopaikkojen ohittaminen sallitaan sallivammin.

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

Nopea optimointi arvioi pienten tiedostojen jokaisen lokeron ja tiivistää vain ne pienet tiedostot, jotka todennäköisesti saavuttavat vähimmäistavoitekoon tai ylittävät tiedostojen vähimmäismää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')

Säädä automaattinen tiivistymiskynnysarvot

Säädä automaattinen tiivistymiskäyttäytyminen asettamalla nämä Spark-istuntoasetukset:

Ominaisuus Kuvaus Oletusarvo Istunnon määritys
maxFileSize Tiivistettyjen tiedostojen enimmäistiedostokoko tavuina. 134217728b (128 Mt) spark.databricks.delta.autoCompact.maxFileSize
minFileSize Tiedoston vähimmäiskoko tavuina, jotta tiedosto katsotaan pakatuksi. Kaikki tämän kynnyksen alapuolella olevat lasketaan tiivistymiseen ja lasketaan mukaan kynnysarvoon minNumFiles . Oletusarvoisesti määrittämätön , lasketaan 1/2 arvosta, maxFileSize ellet määritä arvoa eksplisiittisesti. spark.databricks.delta.autoCompact.minFileSize
minNumFiles Tiedostojen vähimmäismäärä, jonka on oltava kynnysarvon alapuolella, minFileSize jotta automaattinen tiivistys käynnistyy. 50 spark.databricks.delta.autoCompact.minNumFiles

Valitse automaattisen tiivistymisen ja aikataulutetun OPTIMoinnin välillä

Microsoft suosittelee automaattista tiivistymistä oletusstrategiana useimmissa syöttökuormissa. Se yleensä ylittää kiinteät aikataulut ja vähentää töiden ylläpidon OPTIMIZE operatiivista kuormitusta.

Jos viivetavoitteesi ovat tiukat, erilliselle Spark-poolille ajoittaminen OPTIMIZE voi olla parempi ratkaisu, koska automaattinen tiivistyminen tapahtuu synkronisesti kirjoitusten jälkeen.

Käytä tiivistämistä yhdessä pienten tiedostojen estotoimintojen, kuten kirjoituksen optimoinnin, kanssa. Ohjeeksi katso Optimoi kirjoitus.

Lakehouse-taulukoiden ylläpito

Voit suorittaa ad hoc -huoltotoimintoja, kuten OPTIMIZE Lakehouse Explorerista. Lisätietoja löytyy kohdasta Lakehouse-pöydän ylläpito.

Yhteenveto parhaista käytännöistä

Käytä näitä suosituksia tasapainottamaan kirjoituskustannusta, lukusuorituskykyä ja ylläpitokuormaa Delta-taulukon tiivistämisessä.

  • Ota automaattinen tiivistys käyttöön vastaanottoon pipelines usein pienillä kirjoituksilla (suoratoisto tai mikroerä) manuaalisen aikataulutuksen vähentämiseksi.
  • Käytä automaattista tiivistämistä valikoivasti muille kirjoitusmalleille , kun palvelutason tavoitteesi kestävät ajoittaisia kirjoitusviiveen piikkejä.
  • Aikatauluta koko taulukko OPTIMIZE hiljaisina ikkunoina , kun sinun täytyy kirjoittaa useita osioita uudelleen tai soveltaa Z-järjestystä.
  • Ota nopea optimointi käyttöön vähentääksesi kirjoitusvahvistusta ja tehdäksemme OPTIMIZE enemmän idempotenttia.
  • Ota tiedostotason tiivistyskohteet käyttöön vähentääksesi tarpeetonta uudelleenpakkaamista kohdetiedostojen koon kasvaessa ajan myötä.
  • Käytä optimoitua kirjoitusta sopivissa syöttöpoluissa , koska esikirjoituspakkaaminen on usein edullisempaa kuin jälkikirjoitus. Ohjeeksi katso Optimoi kirjoitus.