Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
Gjelder for:✅ Fabric Data Engineering og Data Science
Automatiserte tabellstatistikker i Microsoft Fabric hjelper Spark med å optimalisere spørringsutførelsen ved automatisk å samle tabell- og kolonnemetrikker for Delta-tabeller.
- Rad teller.
- Nullteller per kolonne.
- Minimums- og maksimumsverdier per kolonne.
- Distinkte verdier teller per kolonne.
- Gjennomsnittlige og maksimale kolonnelengder.
Som standard samles disse utvidede statistikkene inn for de første 32 kolonnene (inkludert nestede kolonner) i Delta-tabeller i Fabric. Disse dataene hjelper Sparks kostnadsbaserte optimalisator (CBO) med å forbedre planleggingen for joins, filtre, aggregeringer og partisjonsbeskjæring.
Som et resultat kan mange arbeidsbelastninger redusere spørringslatens og beregningsbruk med mindre manuelt statistisk vedlikehold.
For veiledning på tvers av arbeidsbelastninger om tabelloptimaliseringsstrategier, se vedlikehold og optimalisering av tverrarbeidsbelastningstabeller.
Hovedfordeler
Automatiserte statistikker gir følgende fordeler:
- Aktivert automatisk for Delta-tabeller i Fabric.
- Forbedrer kvaliteten på spørringsplanlegging for vanlige analysemønstre.
- Reduserer behovet for gjentatt manuell statistikkinnsamling.
- Lagrer statistikk utenfor tabelldatafiler for å unngå oppblåst datafil.
Slik fungerer det
Fabric Spark samler inn utvidede statistikker ved skrivetid og bruker dem under planlegging.
Samlingsomfang og oppførsel:
- Statistikk samles inn ved skrivetid.
- Innsamling retter seg mot de første 32 kolonnene (inkludert nestede kolonner).
- Tabellegenskaper kan overstyre oppførsel på økt nivå.
- Konfigurasjonen styrer om Spark injiserer statistikk i optimalisatoren.
Disse målingene hjelper Spark med å velge bedre sammenføyningsstrategier, forbedre beskjæring av partisjoner og optimalisere aggregeringsplaner.
Aktiver eller deaktiver statistikkinnsamling
Bruk enten sesjonskonfigurasjon (arbeidsområde eller notatbok-omfang) eller tabell-egenskaper (per tabell-omfang).
Øktkonfigurasjon
Du kan aktivere eller deaktivere utvidet statsinnsamling og optimaliseringsinjeksjon på øktnivå.
Disse innstillingene kan brukes via Spark SQL, PySpark eller Scala Spark.
Kjør følgende Spark SQL-setninger for å kontrollere innsamling og optimalisatorinjeksjon:
SET spark.microsoft.delta.stats.collect.extended=true;
SET spark.microsoft.delta.stats.collect.extended=false;
SET spark.microsoft.delta.stats.injection.enabled=true;
SET spark.microsoft.delta.stats.injection.enabled=false;
Merk deg
Deltaloggstatistikksamling (spark.databricks.delta.stats.collect) må også være aktivert (standard: sann).
Tabellegenskaper (overstyr sesjonskonfigurasjon)
Tabellegenskaper lar deg kontrollere statistikksamlingen på individuelle tabeller, og overstyre øktinnstillinger.
Aktiver i en tabell:
ALTER TABLE tableName
SET TBLPROPERTIES(
'delta.stats.extended.collect' = 'true',
'delta.stats.extended.inject' = 'true'
)
Deaktiver i en tabell:
ALTER TABLE tableName
SET TBLPROPERTIES(
'delta.stats.extended.collect' = 'false',
'delta.stats.extended.inject' = 'false'
)
Standardoppførsel ved tabellopprettelse
Bruk denne sesjonsnivåinnstillingen for å deaktivere automatisk stempling av egenskaper i utvidede statistikktabeller når nye tabeller opprettes.
Bruk denne Spark SQL-setningen for å deaktivere automatisk innstilling ved tabellopprettelse:
SET spark.microsoft.delta.stats.collect.extended.property.setAtTableCreation=false;
Sjekk statistikk
Du kan undersøke den innsamlede tabell- og kolonnestatistikken ved hjelp av Sparks API-er – nyttig for feilsøking eller validering.
Kontroller radantall og tabellstørrelse (eksempel på Skala):
println(spark.read.table("tableName").queryExecution.optimizedPlan.stats)
Kontroller detaljert kolonnestatistikk:
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}")
}
Beregn statistikk på nytt
Statistikk kan bli utdatert etter skjemaendringer eller delvise oppdateringer. Bruk en av følgende tilnærminger for å beregne på nytt.
Skriv om tabellen (obs! denne tilbakestillingsloggen):
spark.read.table("targetTable").write.partitionBy("partCol").mode("overwrite").saveAsTable("targetTable")
Anbefalt tilnærming (Fabric Spark >= 3.2.0.19):
StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")
Hvis skjemaet endres (for eksempel legg til/slipp kolonner), må du fjerne gammel statistikk før du kompilerer på nytt:
StatisticsStore.removeStatisticsData(spark, "testTable1")
StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")
Bruk ANALYZE TABLE
Bruk ANALYZE TABLE når du vil oppdatere statistikk manuelt i alle kolonner.
Kjør kommandoen:
Kjør følgende Spark SQL-setning:
ANALYZE TABLE tableName COMPUTE STATISTICS FOR ALL COLUMNS
Aktiver injeksjon av katalogstatistikk:
Bruk disse Spark SQL-setningene for å aktivere eller deaktivere katalogstatistikkinjeksjon:
SET spark.microsoft.delta.stats.injection.catalog.enabled=true;
SET spark.microsoft.delta.stats.injection.catalog.enabled=false;
Begrensninger
Det er viktig å forstå de nåværende begrensningene i Fabrics automatiserte statistikk, slik at du kan planlegge tilsvarende.
- Statistikk samles kun inn ved skrivetid.
- Oppdateringer fra andre motorer aggregeres ikke automatisk.
- Kun de første 32 kolonnene er inkludert (inkludert nestede kolonner).
- Slettinger og oppdateringer kan gjøre statistikken utdatert.
- Omberegning krever en omskriving eller statistikk-API-operasjon.
- Statistikkinjeksjon gjelder ikke for nestede kolonner.
- I noen arbeidsbelastninger kan utdaterte eller ufullstendige statistikker føre til regresjoner.
-
ANALYZE TABLEStøtten er begrenset tilFOR ALL COLUMNS. - Kolonnerekkefølge eller konfigurasjonsendringer kan kreve full oppdatering.