Del via


Konfigurer og administrer automatiseret tabelstatistik i Fabric Spark

Gælder for:✅ Dataudvikler ing og datavidenskab i Microsoft Fabric

Automatiserede tabelstatistikker i Microsoft Fabric hjælper Spark med at optimere forespørgselsudførelsen ved automatisk at indsamle tabell- 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-statements for at kontrollere indsamling og optimeringsinjektion:

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;

Bemærk

Samlingen af deltalogstatistik (spark.databricks.delta.stats.collect) skal også aktiveres (standard: true).

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'
)

Deaktiver i en tabel:

ALTER TABLE tableName
SET TBLPROPERTIES(
    'delta.stats.extended.collect' = 'false',
    'delta.stats.extended.inject' = '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 undersøge de indsamlede tabel- og kolonnestatistikker ved hjælp af Sparks API'er – nyttige til fejlfinding eller validering.

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):

StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")

Hvis skemaet ændres (f.eks. du tilføjer/slipper kolonner), skal du fjerne gamle statistikker, før du gencomputer:

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

Brug ANALYZE TABLE

ANALYZE TABLE Brug den, når du vil opdatere statistikker manuelt på tværs af alle kolonner.

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 disse Spark SQL-sætninger til at aktivere eller deaktivere katalogstatistik-injektion:

SET spark.microsoft.delta.stats.injection.catalog.enabled=true;
SET spark.microsoft.delta.stats.injection.catalog.enabled=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.
  • 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 TABLE Supporten er begrænset til FOR ALL COLUMNS.
  • Kolonnerækkefølge eller konfigurationsændringer kan kræve fuld opdatering.