Share via


Geautomatiseerde tabelstatistieken configureren en beheren in Fabric Spark

Van toepassing op:✅ Data-engineer ing en Datawetenschap in Microsoft Fabric

Geautomatiseerde tabelstatistieken in Microsoft Fabric helpen Spark bij het optimaliseren van de uitvoering van query's door automatisch gedetailleerde metrische gegevens op tabelniveau te verzamelen. Deze statistieken zijn onder andere:

  • Totaal aantal rijen
  • Null-tellingen per kolom
  • Minimum- en maximumwaarden per kolom
  • Aantal afzonderlijke waarden per kolom
  • Gemiddelde en maximale kolomlengten

Deze uitgebreide statistieken worden standaard verzameld voor de eerste 32 kolommen (inclusief geneste kolommen) van elke Delta-tabel die in Fabric is gemaakt. De verzamelde gegevens helpen de kostengebaseerde optimizer (CBO) van Spark bij het verbeteren van de queryplanning voor joins, filters, aggregaties en partitiebeperking.

Hierdoor kunnen workloads betere prestatieverbeteringen en minder rekenresourcegebruik zien, allemaal zonder handmatige ANALYZE TABLE uitvoeringen of complexe configuratie.

Belangrijkste voordelen

In deze sectie wordt uitgelegd waarom geautomatiseerde tabelstatistieken belangrijk zijn voor uw workloads.

  • ~45% snellere prestaties voor complexe query's
  • Automatisch ingeschakeld voor nieuwe Delta-tabellen
  • Verbetert de queryplanning en verlaagt de rekenkosten
  • Ondersteunt het aantal afzonderlijke waarden, min/max, nullaantallen en statistieken over kolomlengte.
  • Opgeslagen in Parquet-indeling om opblazen van gegevensbestanden te voorkomen.

Hoe het werkt

Dit gebeurt achter de schermen wanneer Fabric Spark statistieken verzamelt:

  • Aantal rijen
  • Null-tellingen per kolom
  • Minimum- en maximumwaarden per kolom
  • Aantal afzonderlijke waarden per kolom
  • Gemiddelde en maximale kolomlengten

Deze metrische gegevens helpen Spark slimmere beslissingen te nemen over het uitvoeren van query's, het verbeteren van joinstrategieën, het verwijderen van partities en aggregatieprestaties.

In- of uitschakelen

Meer informatie over het beheren van geautomatiseerde verzameling statistieken met behulp van Spark-sessieconfiguraties of tabeleigenschappen.

Sessieconfiguratie

U kunt uitgebreide statistiekenverzameling en optimizer-injectie in- of uitschakelen op sessieniveau.

Uitgebreide verzameling statistieken inschakelen:

spark.conf.set("spark.microsoft.delta.stats.collect.extended", "true")

Uitgebreide verzameling statistieken uitschakelen:

spark.conf.set("spark.microsoft.delta.stats.collect.extended", "false")

Statistiekeninjectie inschakelen in de queryoptimalisatiefunctie:

spark.conf.set("spark.microsoft.delta.stats.injection.enabled", "true")

Statistiekeninjectie uitschakelen:

spark.conf.set("spark.microsoft.delta.stats.injection.enabled", "false")

Opmerking

Verzameling deltalogboekstatistieken () moet ook zijn ingeschakeld (spark.databricks.delta.stats.collectstandaard: true).

Tabeleigenschappen (sessieconfiguraties overschrijven)

Met tabeleigenschappen kunt u de verzameling statistieken beheren voor afzonderlijke tabellen, waarbij sessie-instellingen worden overschreven.

Inschakelen op een tabel:

ALTER TABLE tableName SET TBLPROPERTIES('delta.stats.extended.collect' = true, 'delta.stats.extended.inject' = true)

Uitschakelen op een tabel:

ALTER TABLE tableName SET TBLPROPERTIES('delta.stats.extended.collect' = false, 'delta.stats.extended.inject' = false)

Automatische instelling van tabeleigenschappen bij het maken uitschakelen:

spark.conf.set("spark.microsoft.delta.stats.collect.extended.property.setAtTableCreation", "false")

Hoe statistieken te controleren

U kunt de verzamelde tabel- en kolomstatistieken inspecteren met behulp van spark-API's, handig voor foutopsporing of validatie.

Aantal rijen en tabelgrootte controleren (Scala-voorbeeld):

println(spark.read.table("tableName").queryExecution.optimizedPlan.stats)

Gedetailleerde kolomstatistieken controleren:

spark.read.table("tableName").queryExecution.optimizedPlan.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}")
    }

Statistieken opnieuw berekenen

Soms kunnen statistieken verouderd of gedeeltelijk worden, bijvoorbeeld nadat het schema is gewijzigd of gedeeltelijke updates. U kunt statistieken opnieuw compileren met behulp van deze methoden.

De tabel opnieuw schrijven (opmerking: hiermee wordt de geschiedenis opnieuw ingesteld):

spark.read.table("targetTable").write.partitionBy("partCol").mode("overwrite").saveAsTable("targetTable")

Aanbevolen benadering (Fabric Spark >= 3.2.0.19):

StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")

Als het schema wordt gewijzigd (bijvoorbeeld als u kolommen toevoegt of neerlegt), moet u oude statistieken verwijderen voordat u het opnieuw samenvat:

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

Gebruik de opdracht ANALYZE

De ANALYZE TABLE opdracht biedt een handmatige manier om statistieken te verzamelen in alle kolommen, vergelijkbaar met opensource Spark.

Voer de opdracht uit:

ANALYZE TABLE tableName COMPUTE STATISTICS FOR ALL COLUMNS

Catalogusstatistiekeninjectie inschakelen:

spark.conf.set("spark.microsoft.delta.stats.injection.catalog.enabled", "true")

Catalogusstatistiekeninjectie uitschakelen:

spark.conf.unset("spark.microsoft.delta.stats.injection.catalog.enabled")

Beperkingen

Het is belangrijk om inzicht te hebben in de huidige beperkingen van geautomatiseerde statistieken van Fabric, zodat u dienovereenkomstig kunt plannen.

  • Statistieken die alleen tijdens schrijftijd worden verzameld
  • Updates of wijzigingen van andere engines worden niet samengevoegd
  • Alleen eerste 32 kolommen opgenomen (inclusief geneste kolommen)
  • Verwijderingen of updates kunnen ertoe bijdragen dat statistieken verouderd zijn
  • Geen hercomputing zonder de tabel opnieuw te schrijven of de API te gebruiken
  • Geen statistische injectie voor geneste kolommen
  • Geen prestatieterugval → statistieken kunnen af en toe leiden tot regressies
  • ANALYZE TABLE werkt alleen met FOR ALL COLUMNS
  • Voor het ordenen van kolommen of configuratiewijzigingen is het volledig herschrijven van statistieken vereist