Teilen über


Konfigurieren und Verwalten automatisierter Tabellenstatistiken in Fabric Spark

Gilt für:✅ Datenengineering und Datenwissenschaft in Microsoft Fabric

Automatisierte Tabellenstatistiken in Microsoft Fabric helfen Spark beim Optimieren der Abfrageausführung, indem sie automatisch detaillierte Metriken auf Tabellenebene sammelt. Diese Statistiken umfassen:

  • Gesamtzahl der Zeilen
  • Nullanzahl pro Spalte
  • Mindest- und Maximalwerte pro Spalte
  • Unterschiedliche Werteanzahl pro Spalte
  • Durchschnittliche und maximale Spaltenlänge

Standardmäßig werden diese erweiterten Statistiken für die ersten 32 Spalten (einschließlich geschachtelter Spalten) jeder in Fabric erstellten Delta-Tabelle erfasst. Die gesammelten Daten helfen Sparks kostenbasiertem Optimierer (CBO), die Abfrageplanung für Verknüpfungen, Filter, Aggregationen und Partitions pruning zu verbessern.

Daher können Workloads Verbesserungen der Leistung verzeichnen und eine reduzierte Ressourcenauslastung erleben – alles ohne manuelle ANALYZE TABLE Ausführung oder komplexe Konfiguration.

Wichtige Vorteile

In diesem Abschnitt wird zusammengefasst, warum automatisierte Tabellenstatistiken für Ihre Workloads wichtig sind.

  • ~45% schnellere Leistung bei komplexen Abfragen
  • Automatisch aktiviert in neuen Delta-Tabellen
  • Verbessert die Abfrageplanung und reduziert die Berechnungskosten.
  • Unterstützt unterschiedliche Wertanzahlen, Min/Max,Nullanzahlen und Spaltenlängenmetriken
  • Gespeichert im Parquet-Format, um das Aufblähen von Datendateien zu vermeiden.

Funktionsweise

Dies geschieht im Hintergrund, wenn Fabric Spark Statistiken sammelt:

  • Zeilenanzahl
  • Anzahl Nullwerte pro Spalte
  • Mindest- und Maximalwerte pro Spalte
  • Unterschiedliche Werteanzahl pro Spalte
  • Durchschnittliche und maximale Spaltenlänge

Diese Metriken helfen Spark, intelligentere Entscheidungen über die Ausführung von Abfragen zu treffen – verbesserung der Verknüpfungsstrategien, Partitions pruning und Aggregationsleistung.

Wie man aktiviert oder deaktiviert

Erfahren Sie, wie Sie die automatisierte Statistiksammlung mithilfe von Spark-Sitzungskonfigurationen oder Tabelleneigenschaften steuern.

Sitzungskonfiguration

Sie können erweiterte Statistikensammlung und Optimierereinfügung auf Sitzungsebene aktivieren oder deaktivieren.

Erweiterte Statistiksammlung aktivieren:

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

Erweiterte Statistiksammlung deaktivieren:

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

Aktivieren sie das Einfügen von Statistiken in den Abfrageoptimierer:

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

Deaktivieren sie die Statistikeinfügung:

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

Hinweis

Die Delta-Protokollstatistiksammlung (spark.databricks.delta.stats.collect) muss ebenfalls aktiviert sein (Standard: true).

Tabelleneigenschaften (Überschreibt Sitzungskonfigurationen)

Mithilfe von Tabelleneigenschaften können Sie die Sammlung von Statistiken für einzelne Tabellen steuern und Sitzungseinstellungen überschreiben.

Aktivieren sie in einer Tabelle:

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

Deaktivieren sie in einer Tabelle:

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

Automatische Einstellung von Tabelleneigenschaften beim Erstellen deaktivieren:

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

So überprüfen Sie Statistiken

Sie können die gesammelten Tabellen- und Spaltenstatistiken mithilfe der SPARK-APIs überprüfen– nützlich für das Debuggen oder überprüfen.

Überprüfen der Zeilenanzahl und Tabellengröße (Scala-Beispiel):

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

Detaillierte Spaltenstatistiken überprüfen:

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}")
    }

Erneutes Komputieren von Statistiken

Manchmal können Statistiken veraltet oder teilweise werden , z. B. nach Schemaänderungen oder teilweisen Aktualisierungen. Sie können Statistiken mithilfe dieser Methoden neu berechnen.

Schreiben Sie die Tabelle neu (Hinweis: dies setzt den Verlauf zurück).

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

Empfohlener Ansatz (Fabric Spark >= 3.2.0.19):

StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")

Wenn sich das Schema ändert (z. B. Hinzufügen/Ablegen von Spalten), müssen Sie alte Statistiken entfernen, bevor Sie neu komputieren:

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

Verwenden des BEFEHLS "ANALYSIEREN"

Der ANALYZE TABLE Befehl bietet eine manuelle Möglichkeit zum Sammeln von Statistiken über alle Spalten hinweg, ähnlich wie open-source Spark.

Führen Sie den folgenden Befehl aus:

ANALYZE TABLE tableName COMPUTE STATISTICS FOR ALL COLUMNS

Katalogstatistikeinfügung aktivieren:

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

Katalogstatistikeinfügung deaktivieren:

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

Einschränkungen

Es ist wichtig, die aktuellen Einschränkungen der automatisierten Statistiken von Fabric zu verstehen, damit Sie entsprechend planen können.

  • Statistiken, die nur zur Schreibzeit gesammelt werden
  • Updates oder Änderungen von anderen Engines werden nicht aggregiert
  • Nur die ersten 32 Spalten sind enthalten (einschließlich geschachtelter Spalten)
  • Löschungen oder Aktualisierungen können Statistiken veraltet machen
  • Keine Neukompilierung , ohne die Tabelle neu zu schreiben oder die API zu verwenden
  • Keine Statistikeinfügung für geschachtelte Spalten
  • Kein Leistungsfallback → können Statistiken gelegentlich zu Regressionen führen.
  • ANALYZE TABLE funktioniert nur mit FOR ALL COLUMNS
  • Spaltenreihenfolge oder Konfigurationsänderungen erfordern eine vollständige Neuschreibung, um Statistiken zu aktualisieren.