Del via


Konfigurer og administrer automatisert tabellstatistikk i Fabric Spark

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 TABLE Støtten er begrenset til FOR ALL COLUMNS.
  • Kolonnerekkefølge eller konfigurasjonsendringer kan kreve full oppdatering.