Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:✅ Fabric datateknik och datavetenskap
Automatiserad tabellstatistik i Microsoft Fabric hjälper Spark att optimera frågekörningen genom att automatiskt samla in tabell- och kolumnstatistik för Delta-tabeller.
- Antal rader.
- Antal nullvärden per kolumn.
- Lägsta och högsta värden per kolumn.
- Distinkta värdeantal per kolumn.
- Genomsnittliga och maximala kolumnlängder.
Som standard samlas den utökade statistiken in för de första 32 kolumnerna (inklusive kapslade kolumner) i Delta-tabeller i Fabric. Dessa data hjälper Sparks kostnadsbaserade optimerare (CBO) att förbättra planeringen för kopplingar, filter, aggregeringar och partitionsrensning.
Därför kan många arbetsbelastningar minska frågefördröjningen och beräkningsanvändningen med mindre manuellt statistikunderhåll.
För vägledning för gemensamma arbetsbelastningar om strategier för tabelloptimering, se Gemensamt underhåll och optimering av tabeller.
Viktiga fördelar
Automatiserad statistik ger följande fördelar:
- Aktiverad automatiskt för Delta-tabeller i Fabric.
- Förbättrar frågeplaneringskvaliteten för vanliga analysmönster.
- Minskar behovet av upprepad manuell statistiksamling.
- Lagrar statistik utanför tabelldatafiler för att undvika uppsvälld datafil.
Så här fungerar det
Fabric Spark samlar in utökad statistik vid skrivtiden och använder dem under planeringen.
Samlingsomfång och beteende:
- Statistik samlas in vid skrivtillfället.
- Samlingen riktar sig till de första 32 kolumnerna (inklusive kapslade kolumner).
- Tabellegenskaper kan åsidosätta beteende på sessionsnivå.
- Konfigurationen styr om Spark matar in statistik i optimeraren.
Dessa mått hjälper Spark att välja bättre kopplingsstrategier, förbättra partitionsrensning och optimera aggregeringsplaner.
Aktivera eller inaktivera statistikinsamling
Använd antingen sessionskonfiguration (arbetsyta eller notebook-omfång) eller tabellegenskaper (per tabellomfång).
Sessionskonfiguration
Du kan aktivera eller inaktivera utökad statistikinsamling och optimerarinmatning på sessionsnivå.
De här inställningarna kan tillämpas via Spark SQL, PySpark eller Scala Spark.
Kör följande Spark SQL-satser för att möjliggöra insamling och optimeringsinjektion:
SET spark.microsoft.delta.stats.collect.extended=true;
SET spark.microsoft.delta.stats.injection.enabled=true;
För att inaktivera någon av inställningarna, använd samma kommando med värdet satt till false.
Anmärkning
Insamling av deltaloggstatistik (spark.databricks.delta.stats.collect) måste också vara aktiverad (standard: true).
Important
Om du aktiverar borttagningsvektorer i en tabell inaktiverar du statistikinmatning för tabellen. I tabeller som använder borttagningsvektorer med frekventa uppdateringar eller borttagningar kan den utökade statistiken bli felaktig och få Spark att underskatta tabellstorleken. När detta händer kan optimeraren välja en sändningskoppling som inte är lämplig, vilket kan leda till att frågor misslyckas. Om du vill förhindra det här beteendet inaktiverar du statistikinmatningen så att optimeraren inte använder den inmatade statistiken:
- Sessionsomfattning: ställ in
spark.microsoft.delta.stats.injection.enabledtillfalse. - Tabellomfång: ange tabellegenskapen
delta.stats.extended.injecttillfalse.
Du kan aktivera statistikinsamlingen. För tabeller som använder borttagningsvektorer inaktiverar du endast inmatning i optimeraren.
En regelbunden strategi för bordsunderhåll minskar denna risk.
OPTIMIZE Rensar automatiskt filer där mer än 5% rader refereras med raderingsvektorer, och REORG TABLE ... APPLY (PURGE) kan tvinga fram en omskrivning under den tröskeln. Eftersom utökade statistik samlas in vid skrivtid, uppdaterar omskrivningen statistiken för de berörda filerna. För tabeller med frekventa uppdateringar eller raderingar ska injektering vara inaktiverad mellan underhållscykler.
Tabellegenskaper (åsidosätt sessionskonfiguration)
Med tabellegenskaper kan du styra statistikinsamlingen för enskilda tabeller, vilket åsidosätter sessionsinställningar.
Aktivera i en tabell:
ALTER TABLE tableName
SET TBLPROPERTIES(
'delta.stats.extended.collect' = 'true',
'delta.stats.extended.inject' = 'true'
)
För att inaktivera någon av tabellernas egenskap, sätt dess värde till false.
Standardbeteende för tabellskapande
Använd den här inställningen på sessionsnivå om du vill inaktivera automatisk stämpling av tabellegenskaper för utökad statistik när nya tabeller skapas.
Använd den här Spark SQL-instruktionen för att inaktivera automatisk inställning vid skapande av tabeller:
SET spark.microsoft.delta.stats.collect.extended.property.setAtTableCreation=false;
Kontrollera statistik
Du kan inspektera statistiken som finns tillgänglig för en optimerad frågeplan genom att använda Spark-API:er. Dessa API:er returnerar generiska planstatistik från vilken tillgänglig källa som helst, inklusive Spark-katalogstatistik. Ett resultat innebär inte att utökad statistik för Fabric har samlats in för tabellen.
Kontrollera radantal och tabellstorlek (Scala-exempel):
println(spark.read.table("tableName").queryExecution.optimizedPlan.stats)
Kontrollera detaljerad kolumnstatistik:
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}")
}
Beräkna om statistik
Statistik kan bli inaktuell efter schemaändringar eller partiella uppdateringar. Använd någon av följande metoder för att omkomputera.
Skriv om tabellen (obs! detta återställer historiken):
spark.read.table("targetTable").write.partitionBy("partCol").mode("overwrite").saveAsTable("targetTable")
Rekommenderad metod (Fabric Spark >= 3.2.0.19):
from pyspark.sql.delta import StatisticsStore
StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")
Om schemat ändras (till exempel om du lägger till eller tar bort kolumner), ta bort gamla statistik innan du beräknar om:
from pyspark.sql.delta import StatisticsStore
StatisticsStore.removeStatisticsData(spark, "testTable1")
StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")
Använd ANALYSERA TABELL
Använd ANALYZE TABLE för att beräkna Spark-katalogstatistik över alla kolumner. Detta kommando räknar inte om den utökade statistiken som lagras av Automated Table Statistics. För att beräkna om dessa statistik, använd StatisticsStore.recomputeStatisticsWithCompaction.
Kör kommandot:
Kör följande Spark SQL-uttryck:
ANALYZE TABLE tableName COMPUTE STATISTICS FOR ALL COLUMNS
Aktivera inmatning av katalogstatistik:
Använd denna Spark SQL-sats för att aktivera katalogstatistikinjektion:
SET spark.microsoft.delta.stats.injection.catalog.enabled=true;
För att inaktivera katalogstatistikinjektion, använd samma inställning med värdet satt till false.
Begränsningar
Det är viktigt att förstå de aktuella begränsningarna i Fabrics automatiserade statistik så att du kan planera därefter.
- Statistik samlas endast in vid skrivtillfället.
- Uppdateringar från andra motorer aggregeras inte automatiskt.
- Endast de första 32 kolumnerna ingår (inklusive kapslade kolumner).
- Borttagningar och uppdateringar kan göra statistiken inaktuell. För tabeller som använder raderingsvektorer skriver vanliga
OPTIMIZEellerREORG TABLE ... APPLY (PURGE)underhållsprogram om berörda filer och uppdaterar deras statistik. Inaktivera statistikinjektion mellan underhållscykler på tabeller med frekventa uppdateringar eller borttagningar. - Omkomputering kräver en omskrivnings- eller statistik-API-åtgärd.
- Statistikinmatning gäller inte för kapslade kolumner.
- I vissa arbetsbelastningar kan inaktuell eller ofullständig statistik leda till regressioner.
-
ANALYZE TABLEsupport är begränsad tillFOR ALL COLUMNS. - Kolumnordning eller konfigurationsändringar kan kräva fullständig uppdatering.