Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Gælder for:✅ Fabric Data Engineering og Data Science
Automatiserede tabelstatistikker i Microsoft Fabric hjælper Spark med at optimere forespørgselsudførelsen ved automatisk at indsamle tabeller og kolonnemetrikker for Delta-tabeller.
- Rækketælling.
- Nultællinger pr. kolonne.
- Minimums- og maksimumsværdier pr. kolonne.
- Forskellige værdioptællinger pr. kolonne.
- Gennemsnitlige og maksimale kolonnelængder.
Som standard indsamles disse udvidede statistikker for de første 32 kolonner (inklusive indlejrede kolonner) i Delta-tabeller i Fabric. Disse data hjælper Sparks omkostningsbaserede optimeringsværktøj (CBO) med at forbedre planlægningen af joins, filtre, aggregeringer og beskæring af partitioner.
Som følge heraf kan mange arbejdsbelastninger reducere forespørgselsforsinkelse og beregningsforbrug med mindre manuel statistikvedligeholdelse.
For tværarbejdsbelastningsvejledning om tabeloptimeringsstrategier, se Tværarbejdsbelastnings tabelvedligeholdelse og optimering.
Vigtigste fordele
Automatiserede statistikker giver følgende fordele:
- Aktiveret automatisk for Delta-tabeller i Fabric.
- Forbedrer kvaliteten af forespørgselsplanlægning for almindelige analysemønstre.
- Reducerer behovet for gentagen manuel statsindsamling.
- Gemmer statistikker uden for tabeldatafiler for at undgå datafil-oppustethed.
Sådan fungerer det
Fabric Spark indsamler udvidede statistikker ved skrivetid og bruger dem under planlægningen.
Indsamlingsomfang og adfærd:
- Statistikker indsamles ved skrivetidspunktet.
- Indsamling retter sig mod de første 32 kolonner (inklusive indlejrede kolonner).
- Tabelegenskaber kan tilsidesætte sessionsniveau-adfærd.
- Konfigurationen styrer, om Spark indsætter statistik i optimeringsværktøjet.
Disse målinger hjælper Spark med at vælge bedre joinstrategier, forbedre partitionsbeskæring og optimere aggregeringsplaner.
Aktiver eller deaktiver statistikindsamling
Brug enten sessionskonfiguration (workspace eller notebook scope) eller table properties (per-table scope).
Konfiguration af session
Du kan aktivere eller deaktivere udvidet statistikindsamling og optimeringsinjektion på sessionsniveau.
Disse indstillinger kan anvendes via Spark SQL, PySpark eller Scala Spark.
Kør følgende Spark SQL-kommandoer for at muliggøre indsamling og optimeringsinjektion:
SET spark.microsoft.delta.stats.collect.extended=true;
SET spark.microsoft.delta.stats.injection.enabled=true;
For at deaktivere begge indstillinger skal du bruge den samme kommando med værdien sat til false.
Bemærk
Samlingen af deltalogstatistik (spark.databricks.delta.stats.collect) skal også aktiveres (standard: true).
Vigtig
Hvis du aktiverer deletionsvektorer på en tabel, så deaktiver statistikinjektion for den tabel. På tabeller, der bruger sletningsvektorer med hyppige opdateringer eller sletninger, kan de udvidede statistikker blive unøjagtige og få Spark til at undervurdere tabelstørrelsen. Når dette sker, kan optimereren vælge en broadcast-join, der ikke er passende, hvilket kan få forespørgsler til at fejle. For at forhindre denne adfærd skal du deaktivere statistikinjektion, så optimereren ikke bruger de injicerede statistikker:
- Sessionens omfang: sæt
spark.microsoft.delta.stats.injection.enabledtilfalse. - Tabelomfang: sæt tabelegenskaben
delta.stats.extended.injecttil .false
Du kan holde statistikindsamling aktiveret. For tabeller, der bruger deletionsvektorer, deaktiver kun injektion i optimeringsværktøjet.
En regelmæssig bordvedligeholdelsesstrategi reducerer denne risiko.
OPTIMIZE Renser automatisk filer, hvor mere end 5% rækker refereres til med sletningsvektorer, og REORG TABLE ... APPLY (PURGE) kan tvinge en omskrivning under denne grænse. Fordi udvidede statistikker indsamles ved skrivetidspunktet, opdaterer omskrivningen statistikkerne for de berørte filer. For tabeller med hyppige opdateringer eller sletninger, hold injektion deaktiveret mellem vedligeholdelsescyklusser.
Tabelegenskaber (overstyr sessionskonfiguration)
Med tabelegenskaber kan du styre statistiksamlingen for individuelle tabeller og tilsidesætte sessionsindstillinger.
Aktivér på en tabel:
ALTER TABLE tableName
SET TBLPROPERTIES(
'delta.stats.extended.collect' = 'true',
'delta.stats.extended.inject' = 'true'
)
For at deaktivere nogen af tabellernes egenskaber, sæt dens værdi til false.
Standardadfærd ved tabeloprettelse
Brug denne sessionsniveau-indstilling til at deaktivere automatisk stempling af udvidede-statistik-tabelleegenskaber, når nye tabeller oprettes.
Brug denne Spark SQL-sætning til at deaktivere automatisk indstilling ved tabeloprettelse:
SET spark.microsoft.delta.stats.collect.extended.property.setAtTableCreation=false;
Tjek statistikker
Du kan inspicere statistikkerne, der er tilgængelige for en optimeret forespørgselsplan ved at bruge Spark API'er. Disse API'er returnerer generiske planstatistikker fra enhver tilgængelig kilde, inklusive Spark-katalogstatistikker. Et resultat bekræfter ikke, at Fabric udvidede statistikker blev indsamlet for tabellen.
Kontrollér rækkeantal og tabelstørrelse (Scala-eksempel):
println(spark.read.table("tableName").queryExecution.optimizedPlan.stats)
Kontrollér detaljerede kolonnestatistikker:
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}")
}
Genberegning af statistik
Statistikker kan blive forældede efter skemaændringer eller delvise opdateringer. Brug en af følgende tilgange til at genberegne.
Omskriv tabellen (bemærk! Denne nulstillingsoversigt):
spark.read.table("targetTable").write.partitionBy("partCol").mode("overwrite").saveAsTable("targetTable")
Anbefalet fremgangsmåde (Fabric Spark >= 3.2.0.19):
from pyspark.sql.delta import StatisticsStore
StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")
Hvis skemaet ændrer sig (for eksempel hvis du tilføjer eller fjerner kolonner), fjern gamle statistikker før genberegning:
from pyspark.sql.delta import StatisticsStore
StatisticsStore.removeStatisticsData(spark, "testTable1")
StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")
Brug ANALYZE TABLE
Brug ANALYZE TABLE til at beregne Spark-katalogstatistikker på tværs af alle kolonner. Denne kommando genberegner ikke de udvidede statistikker, der er gemt af Automated Table Statistics. For at genberegne disse statistikker, brug StatisticsStore.recomputeStatisticsWithCompaction.
Kør kommandoen:
Kør følgende Spark SQL-sætning:
ANALYZE TABLE tableName COMPUTE STATISTICS FOR ALL COLUMNS
Aktivér indsprøjting af katalogstatistik:
Brug denne Spark SQL-sætning til at aktivere katalogstatistik-injektion:
SET spark.microsoft.delta.stats.injection.catalog.enabled=true;
For at deaktivere katalogstatistik-injektion, brug samme indstilling med værdien sat til false.
Begrænsninger
Det er vigtigt at forstå de aktuelle begrænsninger i Fabric's automatiserede statistikker, så du kan planlægge i overensstemmelse hermed.
- Statistikker indsamles kun ved skrivetid.
- Opdateringer fra andre motorer aggregeres ikke automatisk.
- Kun de første 32 kolonner er inkluderet (inklusive indlejrede kolonner).
- Sletninger og opdateringer kan gøre statistikker forældede. For tabeller, der bruger slettevektorer, omskriver almindelige
OPTIMIZEellerREORG TABLE ... APPLY (PURGE)vedligeholdelsesmæssige filer de berørte filer og opdaterer deres statistikker. Deaktiver statistikinjektion mellem vedligeholdelsescyklusser på tabeller med hyppige opdateringer eller sletninger. - Genberegning kræver en omskrivning eller statistik-API-operation.
- Statistikinjektion gælder ikke for indlejrede kolonner.
- I nogle arbejdsbelastninger kan forældede eller ufuldstændige statistikker føre til regressioner.
-
ANALYZE TABLESupporten er begrænset tilFOR ALL COLUMNS. - Kolonnerækkefølge eller konfigurationsændringer kan kræve fuld opdatering.