Fabric Sparkin automaattisia taulukkotilastoja määritetään ja hallitaan

Koskee:✅ Fabric-data-insinöörit ja datatiede

Automaattiset taulukkotilastot Microsoft Fabric -sovelluksessa auttavat Sparkia optimoimaan kyselyjen suoritusta keräämällä automaattisesti taulukoiden ja sarakkeiden mittarit Delta-tauluille.

  • Riviä lasketaan.
  • Null lasketaan sarakkeeseen.
  • Vähimmäis- ja maksimiarvot per sarakke.
  • Eri arvot lasketaan sarakkeeseen.
  • Keskimääräiset ja maksimipituiset sarakkeet.

Oletuksena nämä laajennetut tilastot kerätään ensimmäisille 32 sarakkeelle (mukaan lukien sisäkkäiset sarakkeet) Delta-taulukoissa Fabricissa. Tämä data auttaa Sparkin kustannusperusteista optimointiohjelmaa (CBO) parantamaan liitoksen, suodattimien, aggregaatioiden ja osien karsimisen suunnittelua.

Tämän seurauksena monet työkuormat voivat vähentää kyselyiden viivettä ja laskennan käyttöä vähentämällä manuaalista tilastojen ylläpitoa.

Taulukkooptimointistrategioiden ristiintyökuorman ohjausta löytyy kohdasta Cross-workload table maintenance and optimization.

Keskeiset edut

Automaattiset tilastot tarjoavat seuraavat edut:

  • Automaattinen käytössä Delta-taulukoille Fabricissa.
  • Parantaa kyselysuunnittelun laatua yleisille analytiikkamalleille.
  • Vähentää tarvetta toistua manuaalista tilastojen keräämistä.
  • Tallentaa tilastot taulukkotiedostojen ulkopuolelle tietotiedostojen paisumisen välttämiseksi.

Miten se toimii

Fabric Spark kerää laajennettuja tilastoja kirjoitushetkellä ja käyttää niitä suunnittelun aikana.

Kokoelman laajuus ja käyttäytyminen:

  • Tilastot kerätään kirjoitusaikana.
  • Kokoelma kohdistuu ensimmäisiin 32 sarakkeeseen, mukaan lukien sisäkkäiset sarakkeet).
  • Taulukon ominaisuudet voivat ohittaa istuntotason käyttäytymisen.
  • Konfiguraatio määrittää, syöttääkö Spark tilastoja optimoijaan.

Nämä mittarit auttavat Sparkia valitsemaan parempia yhdistämisstrategioita, parantamaan osien karsimista ja optimoimaan aggregaatiosuunnitelmia.

Ota käyttöön tai poista käytöstä tilastojen keruu

Käytä joko istuntokonfiguraatiota (työtila tai muistikirjan laajuus) tai taulun ominaisuuksia (taulukkokohtainen laajuus).

Istunnon määrittäminen

Voit ottaa käyttöön tai poistaa käytöstä laajennetun tilastokokoelman ja optimointitoiminnon lisäämisen istuntotasolla.

Näitä asetuksia voi soveltaa Spark SQL:n, PySparkin tai Scala Sparkin kautta.

Suorita seuraavat Spark SQL -lauseet aktivoidaksesi keräyksen ja optimointiinjektion:

SET spark.microsoft.delta.stats.collect.extended=true;
SET spark.microsoft.delta.stats.injection.enabled=true;

Poistaaksesi kummankin asetuksen, käytä samaa komentoa, jonka arvo on falseasetettu .

Huomautus

Myös deltalokitilastojen kokoelman (spark.databricks.delta.stats.collect) on oltava käytössä (oletusarvo: true).

Tärkeää

Jos otat poistovektorit käyttöön taulukossa, poista tilastojen injektio käytöstä kyseisessä taulukossa. Tauluissa, joissa käytetään poistovektoreita, joissa päivitetään tai poistataan usein, laajennetut tilastot voivat muuttua epätarkkoiksi ja saada Sparkin aliarvioimaan taulun koon. Kun näin tapahtuu, optimoija saattaa valita lähetysliitoksen, joka ei ole sopiva, mikä voi aiheuttaa kyselyjen epäonnistumisen. Tämän käyttäytymisen estämiseksi poista tilastojen injektio käytöstä, jotta optimointilaite ei käytä injektoituja tilastoja:

  • Istunnon laajuus: asetettu spark.microsoft.delta.stats.injection.enabled arvoon false.
  • Taulun laajuus: aseta taulun delta.stats.extended.inject ominaisuus arvoon false.

Voit pitää tilastojen keruun päällä. Taulukoissa, jotka käyttävät poistovektoreita, poista vain injektio optimoijaan.

Säännöllinen pöydän ylläpitostrategia vähentää tätä riskiä. OPTIMIZE poistaa automaattisesti tiedostot, joissa yli 5% rivejä viitataan poistovektoreilla, ja REORG TABLE ... APPLY (PURGE) voi pakottaa uudelleenkirjoituksen alle tämän kynnyksen. Koska laajennetut tilastot kerätään kirjoitusaikana, uudelleenkirjoitus päivittää tilastot kyseisille tiedostoille. Tauluissa, joissa päivitetään tai poistetaan usein, pidä injektio pois päältä huoltosyklien välillä.

Taulun ominaisuudet (ohitetaan istunnon konfiguraatio)

Taulukon ominaisuuksien avulla voit hallita tilastotietojen kokoelmaa yksittäisissä taulukoissa ohittaen istunnon asetukset.

Ota käyttöön taulukossa:

ALTER TABLE tableName
SET TBLPROPERTIES(
    'delta.stats.extended.collect' = 'true',
    'delta.stats.extended.inject' = 'true'
)

Poistaaksesi jommankumman tauluominaisuuden käytöstä, aseta sen arvo false.

Taulukon luomisen oletuskäyttäytyminen

Käytä tätä istuntotason asetusta poistaaksesi käytöstä automaattinen leimaaminen laajennettujen tilastojen taulujen ominaisuuksille, kun uusia tauluja luodaan.

Käytä tätä Spark SQL -lausetta poistaaksesi automaattisen asetuksen käytöstä taulun luomisessa:

SET spark.microsoft.delta.stats.collect.extended.property.setAtTableCreation=false;

Tarkista tilastot

Voit tarkastella optimoidun kyselysuunnitelman tilastoja käyttämällä Spark-rajapintoja. Nämä API:t palauttavat yleisiä liittymien tilastoja mistä tahansa saatavilla olevasta lähteestä, mukaan lukien Sparkin katalogitilastot. Tulos ei vahvista, että Fabric-laajennetut tilastot kerättiin taulukkoa varten.

Tarkista rivien määrä ja taulukon koko (Skalaa-esimerkki):

println(spark.read.table("tableName").queryExecution.optimizedPlan.stats)

Tarkista yksityiskohtaiset saraketilastot:

val stats = spark.read.table("tableName").queryExecution.optimizedPlan.stats

stats.attributeStats.foreach { case (attrName, colStat) =>
    println(s"colName: $attrName distinctCount: ${colStat.distinctCount} min: ${colStat.min} max: ${colStat.max} nullCount: ${colStat.nullCount} avgLen: ${colStat.avgLen} maxLen: ${colStat.maxLen}")
}

Laske tilastot uudelleen

Tilastot voivat vanhentua skeemamuutosten tai osittaisten päivitysten jälkeen. Käytä jotakin seuraavista menetelmistä laskeaksesi uudelleen.

Kirjoita taulukko uudelleen (huomautus: tämä nollaa historian):

spark.read.table("targetTable").write.partitionBy("partCol").mode("overwrite").saveAsTable("targetTable")

Suositeltu lähestymistapa (Fabric Spark >= 3.2.0.19):

from pyspark.sql.delta import StatisticsStore

StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")

Jos skeema muuttuu (esimerkiksi lisäät tai poistat sarakkeita), poista vanhat tilastot ennen uudelleenlaskentaa:

from pyspark.sql.delta import StatisticsStore

StatisticsStore.removeStatisticsData(spark, "testTable1")
StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")

Käytä ANALYZE TABLE

Käytetään ANALYZE TABLE Spark-katalogin tilastojen laskemiseen kaikissa sarakkeissa. Tämä komento ei laske uudelleen Automated Table Statisticsin tallentamia laajennettuja tilastoja. Näiden tilastojen uudelleenlaskemiseksi käytä StatisticsStore.recomputeStatisticsWithCompaction.

Suorita komento:

Suorita seuraava Spark SQL -lause:

ANALYZE TABLE tableName COMPUTE STATISTICS FOR ALL COLUMNS

Ota käyttöön luettelon tilastotiedot:

Käytä tätä Spark SQL -lausetta ottaaksesi käyttöön luettelotilastojen injektion:

SET spark.microsoft.delta.stats.injection.catalog.enabled=true;

Poistaaksesi katalogin tilastojen injektion, käytä samaa asetusta, jonka arvo on asetettu .false

Rajoitukset

On tärkeää ymmärtää Fabricin automatisoitujen tilastotietojen nykyiset rajoitukset, jotta voit suunnitella ne vastaavasti.

  • Tilastot kerätään vain kirjoitushetkellä.
  • Muiden moottoreiden päivityksiä ei yhdistetä automaattisesti.
  • Mukana on vain ensimmäiset 32 saraketta (mukaan lukien sisäkkäiset sarakkeet).
  • Poistot ja päivitykset voivat tehdä tilastoista vanhentuneita. Tauluissa, jotka käyttävät poistovektoreita, tavallinen OPTIMIZE tai REORG TABLE ... APPLY (PURGE) ylläpito kirjoittaa vaurioituneet tiedostot uudelleen ja päivittää niiden tilastot. Poista tilastojen injektio käytöstä huoltosyklien välillä tauluilla, joissa päivitetään tai poistataan säännöllisesti.
  • Uudelleenlaskenta vaatii uudelleenkirjoituksen tai tilastollisen API-toiminnon.
  • Tilastojen injektio ei koske sisäkkäisiä sarakkeita.
  • Joissakin työkuormissa vanhentuneet tai keskeneräiset tilastot voivat johtaa regressioihin.
  • ANALYZE TABLETuki on rajoitettu .FOR ALL COLUMNS
  • Sarakkeiden järjestys tai konfiguraatiomuutokset voivat vaatia täyden päivityksen.