Tiedostojen ohittaminen Delta-taulukoissa

Tiedostojen ohittaminen on Delta Laken lukuoptimointi, joka antaa Spark-moottorille mahdollisuuden välttää datatiedostojen skannaaminen, jotka eivät voi sisältää vastaavia rivejä. Koska moottori lukee vähemmän dataa, kyselyt toimivat nopeammin ja kuluttavat vähemmän I/O-resursseja.

Miten tiedostojen ohittaminen toimii

Joka kerta kun tiedosto kirjoitetaan Delta-taululle, Delta Lake tallentaa tiedostokohtaiset sarakkeet transaktiolokissa. Nämä tilastot sisältävät kunkin indeksoidun sarakkeen minimiarvon, maksimiarvon ja nollamäärän kyseisessä tiedostossa.

Kun kysely sisältää suodattimen predikaatin, moottori vertaa predikaattiarvoa kunkin tiedoston minim/maksimiväliin. Jos predikaattiarvo jää tiedoston alueen ulkopuolelle, tiedosto ohitetaan kokonaan—sitä ei tarvitse avata tai skannata.

Esimerkiksi tarkastellaan taulukkoa sales , joka on jaettu viiteen tietotiedostoon päivämäärävälin mukaan:

Tiedosto Min/maksimitilastot Tulos WHERE date = '2024-03-15'
Tiedosto 1 date [2024-01-01 .. 2024-02-28] Ohitettu
Tiedosto 2 date [2024-03-01 .. 2024-03-31] Lue ✓
Tiedosto 3 date [2024-04-01 .. 2024-05-31] Ohitettu
Tiedosto 4 date [2024-06-01 .. 2024-07-31] Ohitettu
Tiedosto 5 date [2024-08-01 .. 2024-09-30] Ohitettu

Tässä tapauksessa neljä viidestä tiedostosta ohitetaan – 80% vähemmän dataa skannattu – koska niiden minimi/maksimivälit eivät mene päällekkäin suodattimen arvon kanssa.

Important

Predikaattiarvon tietotyypin on vastattava saraketin tyyppiä. Tyypin epäsopimattomuus voi estää moottoria käyttämästä tiedostotason tilastoja ohittamiseen.

Oletustoimintaa

Delta Lake kerää tiedostotilastoja automaattisesti seuraavilla oletusasetuksilla:

  • Vain ensimmäiset 32 saraketta (järjestyspaikan mukaan) kerätään tilastoja.
  • Tilastot, joita seurataan per sarake per tiedosto: minim, maksimi ja nollamäärä
  • Tilastojen kerääminen pitkistä särösarakkeista on kallista ja lisää kirjoituskuormaa, joten sijoittuminen on tärkeää.

Taulukkoominaisuus delta.dataSkippingNumIndexedCols ohjaa sarakkeen rajaa. Sarakkeet, jotka ylittävät tämän kynnyksen, eivät saa tiedostotason tilastoja eivätkä voi osallistua tiedostojen ohittamiseen.

Kelvolliset tietotyypit

Kaikki saraketyypit eivät tue tiedostotason tilastoja ja siten tiedostojen ohittamista. Moottori arvioi kunkin sarakkeen tietotyypin selvittääkseen, voidaanko kerätä minimi/maksimitilastoja.

Aina kelpoisia (atomityypit)

  • NumericType(ByteType, ShortType, IntegerType, LongType, FloatTypeDoubleType, , ) DecimalType
  • DateType
  • TimestampType
  • TimestampNTZType
  • StringType

Ehdollisesti kelvollinen

Muistio

Seuraavat tyypit voidaan ottaa käyttöön aloittaessaan Fabric Spark Runtime 2.0:sta (Delta 4.1)

  • VariantType: kun spark.databricks.delta.variantShredding.collectVariantDataSkippingStats on käytössä.
  • ArrayType: kun spark.microsoft.delta.skipping.complexTypes.enabled on käytössä ja alkiotyyppi itsessään on kelvollinen.
  • MapType: kun spark.microsoft.delta.skipping.complexTypes.enabled on käytössä ja sekä avain että arvotyypit ovat kelvollisia.

Ei kelvollinen

  • BinaryType
  • BooleanType
  • StructType (kokonaisuutena—rakenteiden sisällä olevat lehtikentät arvioidaan yksilöllisesti)
  • NullType

Maksimoi palstapeitto

Saadaksesi parhaan hyödyn tiedostojen ohittamisesta, varmista, että sarakkeet, joihin suodatat useimmin, kuuluvat tiedostotilastoihin.

Aseta usein suodatetut sarakkeet ensin

Aseta sarakkeet, jotka esiintyvät useimmiten WHERE lauseissa, yhdistävät avaimet ja suodata predikaatit taulukon skeeman ensimmäisiin 32 ordinaalipaikkaan. Siirrä pitkät merkkijonosarakkeet tai matalan selektiivisyyden sarakkeet sijainnin 32 ulkopuolelle, jotta et tuhlaa kirjoituskuormaa tilastoihin, jotka harvoin auttavat.

ALTER TABLE table_name ALTER COLUMN long_str_col AFTER last_indexed_col

Lisää indeksoitujen sarakkeiden määrää

Jos taulukossasi on yli 32 saraketta, jotka hyötyvät tilastoista, nosta oletusrajaa:

ALTER TABLE table_name SET TBLPROPERTIES ('delta.dataSkippingNumIndexedCols' = '40')

Muistio

Indeksoitujen sarakkeiden määrän kasvattaminen lisää kirjoituskuormaa jokaiselle datatiedostolle. Tätä arvoa nostetaan vain, kun ylimääräisiä sarakkeita käytetään usein suodatinpredikaateissa.

Määritä tarkat sarakkeet tilastoille

Käytä delta.dataSkippingStatsColumns eksplisiittisesti hallintaan, mitkä sarakkeet saavat tiedostotilastoja, riippumatta ordinaalisijainnista:

ALTER TABLE table_name SET TBLPROPERTIES ('delta.dataSkippingStatsColumns' = 'col1,col2')

Kun delta.dataSkippingStatsColumns se on asetettu, tilastot kerätään vain määritellyistä sarakkeista. Tämä lähestymistapa antaa sinulle tarkan hallinnan kirjoituskustannusten ja lukuhyötyjen välisestä kompromissista.

Yhdistä tiedostojen ohittaminen datan asetteluun

Tiedostojen ohittaminen toimii parhaiten, kun vastaavat arvot ovat samassa tiedostossa. Tekniikat kuten ZORDER BY nestemäinen klusterointi järjestävät datan fyysisesti uudelleen niin, että samankaltaisilla sarakkeilla varustetut rivit päätyvät samoihin tiedostoihin. Samankaltaisten arvojen kokoaminen tiivistää tiedostokohtaisia mini/max-alueita, mikä lisää moottorin ohittamien tiedostojen prosenttiosuutta tietylle suodattimelle.

Lisätietoja datan asettelun optimoinnista löytyy kohdasta Taulukko tiivistäminen, Nesteklusterointi ja Z-järjestys.