Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Gilt für:✅ Fabric Data Engineering und Data Science
Automatisierte Tabellenstatistiken in Microsoft Fabric helfen Spark, die Abfrageausführung zu optimieren, indem Tabellen- und Spaltenmetriken für Delta-Tabellen automatisch gesammelt werden.
- Zeilenanzahl.
- Nullanzahl pro Spalte.
- Mindest- und Maximalwerte pro Spalte.
- Unterschiedliche Werte zählen pro Spalte.
- Durchschnittliche und maximale Spaltenlänge.
Standardmäßig werden diese erweiterten Statistiken für die ersten 32 Spalten (einschließlich geschachtelter Spalten) von Delta-Tabellen in Fabric gesammelt. Diese Daten helfen Sparks kostenbasiertem Optimierer (CBO), die Planung für Verknüpfungen, Filter, Aggregationen und Partitionspruning zu verbessern.
Daher können viele Workloads die Abfragelatenz reduzieren und die Berechnungsauslastung mit weniger manueller Statistikwartung reduzieren.
Für arbeitsübergreifende Anleitungen zu Strategien zur Tabellenoptimierung siehe "Auslastungsübergreifende Tabellenwartung und -optimierung".
Hauptvorteile
Automatisierte Statistiken bieten die folgenden Vorteile:
- Wird automatisch für Delta-Tabellen in Fabric aktiviert.
- Verbessert die Qualität der Abfrageplanung für allgemeine Analysemuster.
- Reduziert den Bedarf an wiederholten manuellen Statistiken.
- Speichert Statistiken außerhalb von Tabellendatendateien, um die Aufblähung von Datendateien zu vermeiden.
Funktionsweise
Fabric Spark sammelt erweiterte Statistiken zur Schreibzeit und verwendet sie während der Planung.
Sammlungsbereich und -verhalten:
- Statistiken werden zur Schreibzeit gesammelt.
- Die Sammlung zielt auf die ersten 32 Spalten (einschließlich geschachtelter Spalten) ab.
- Tabelleneigenschaften können das Verhalten auf Sitzungsebene außer Kraft setzen.
- Die Konfiguration steuert, ob Spark Statistiken in den Optimierer einjiziert.
Diese Metriken helfen Spark bei der Auswahl besserer Verknüpfungsstrategien, verbessern die Partitions pruning und optimieren Aggregationspläne.
Aktivieren oder Deaktivieren der Statistiksammlung
Verwenden Sie entweder die Sitzungseinstellungen (Arbeitsbereich oder Notizbuch) oder die Tabelleneigenschaften (Bereich pro Tabelle).
Sitzungskonfiguration
Sie können erweiterte Statistikensammlung und Optimierereinfügung auf Sitzungsebene aktivieren oder deaktivieren.
Diese Einstellungen können über Spark SQL, PySpark oder Scala Spark angewendet werden.
Führen Sie die folgenden Spark SQL-Anweisungen aus, um Collection und Optimizer Injection zu ermöglichen:
SET spark.microsoft.delta.stats.collect.extended=true;
SET spark.microsoft.delta.stats.injection.enabled=true;
Um eine der beiden Einstellungen zu deaktivieren, verwenden Sie denselben Befehl mit dem auf false gesetzten Wert.
Hinweis
Die Delta-Protokollstatistiksammlung (spark.databricks.delta.stats.collect) muss ebenfalls aktiviert sein (Standard: true).
Von Bedeutung
Wenn Sie Löschvektoren für eine Tabelle aktivieren, deaktivieren Sie die Statistikeinfügung für diese Tabelle. Bei Tabellen, die Löschvektoren verwenden und häufig aktualisiert oder gelöscht werden, können die erweiterten Statistiken ungenau werden und dazu führen, dass Spark die Tabellengröße unterschätzt. In diesem Fall kann der Optimierer eine nicht geeignete Broadcast-Verknüpfung auswählen, was dazu führen kann, dass Abfragen fehlschlagen. Um dieses Verhalten zu verhindern, deaktivieren Sie das Einfügen von Statistiken, damit der Optimierer die eingefügten Statistiken nicht verwendet:
- Sitzungsbereich:
spark.microsoft.delta.stats.injection.enabledauffalsefestlegen. - Tabellenbereich: Legen Sie die
delta.stats.extended.injectTabelleneigenschaft auffalse.
Sie können die Statistiksammlung aktiviert lassen. Deaktivieren Sie für Tabellen, die Löschvektoren verwenden, nur die Einfügung in den Optimierer.
Eine Strategie zur regelmäßigen Tabellenwartung verringert dieses Risiko.
OPTIMIZE Löscht automatisch Dateien, bei denen mehr als 5% Zeilen durch Löschvektoren referenziert werden, und REORG TABLE ... APPLY (PURGE) kann eine Umschreibung unterhalb dieses Schwellenwerts erzwingen. Da erweiterte Statistiken zur Schreibzeit gesammelt werden, aktualisiert das Rewrite die Statistiken der betroffenen Dateien. Für Tabellen mit häufigen Aktualisierungen oder Löschungen sollte die Injektion zwischen den Wartungszyklen deaktiviert bleiben.
Tabelleneigenschaften (Sitzungseinstellungen außer Kraft setzen)
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'
)
Um eine der beiden Tabelleneigenschaften zu deaktivieren, setzen Sie ihren Wert auf false.
Standardverhalten der Tabellenerstellung
Verwenden Sie diese Einstellung auf Sitzungsebene, um das automatische Stempeln erweiterter Tabelleneigenschaften für erweiterte Statistiken zu deaktivieren, wenn neue Tabellen erstellt werden.
Verwenden Sie diese Spark SQL-Anweisung, um die automatische Einstellung bei der Tabellenerstellung zu deaktivieren:
SET spark.microsoft.delta.stats.collect.extended.property.setAtTableCreation=false;
Überprüfen von Statistiken
Sie können die für einen optimierten Abfrageplan verfügbaren Statistiken mit Spark-APIs einsehen. Diese APIs liefern allgemeine Planstatistiken aus jeder verfügbaren Quelle, einschließlich Spark-Katalogstatistiken. Das Ergebnis ist kein Beleg dafür, dass für die Tabelle erweiterte Statistiken von Fabric erfasst wurden.
Überprüfen der Zeilenanzahl und Tabellengröße (Scala-Beispiel):
println(spark.read.table("tableName").queryExecution.optimizedPlan.stats)
Detaillierte Spaltenstatistiken überprüfen:
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}")
}
Neukompilieren von Statistiken
Statistiken können nach Schemaänderungen oder teilweisen Aktualisierungen veraltet werden. Verwenden Sie einen der folgenden Ansätze, um neu zu 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):
from pyspark.sql.delta import StatisticsStore
StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")
Wenn sich das Schema ändert (zum Beispiel wenn Sie Spalten hinzufügen oder entfernen), entfernen Sie alte Statistiken vor der Neuberechnung:
from pyspark.sql.delta import StatisticsStore
StatisticsStore.removeStatisticsData(spark, "testTable1")
StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")
VERWENDE ANALYSETABELLE
Verwenden Sie ANALYZE TABLE, um Spark-Katalogstatistiken für alle Spalten zu berechnen. Dieser Befehl berechnet die erweiterten Statistiken, die von Automated Table Statistics gespeichert werden, nicht erneut. Um diese Statistiken neu zu berechnen, verwenden Sie StatisticsStore.recomputeStatisticsWithCompaction.
Führen Sie den folgenden Befehl aus:
Führen Sie die folgende Spark SQL-Anweisung aus:
ANALYZE TABLE tableName COMPUTE STATISTICS FOR ALL COLUMNS
Katalogstatistikeinfügung aktivieren:
Verwenden Sie diese Spark SQL-Anweisung, um die Katalogstatistik-Injektion zu ermöglichen:
SET spark.microsoft.delta.stats.injection.catalog.enabled=true;
Um die Katalogstatistik-Injektion zu deaktivieren, verwenden Sie dieselbe Einstellung mit dem Wert auf false.
Einschränkungen
Es ist wichtig, die aktuellen Einschränkungen der automatisierten Statistiken von Fabric zu verstehen, damit Sie entsprechend planen können.
- Statistiken werden nur zur Schreibzeit erfasst.
- Updates von anderen Engines werden nicht automatisch aggregiert.
- Nur die ersten 32 Spalten sind enthalten (einschließlich geschachtelter Spalten).
- Lösch- und Aktualisierungen können Statistiken veraltet machen. Bei Tabellen, die Löschvektoren verwenden, schreibt die reguläre
OPTIMIZEoderREORG TABLE ... APPLY (PURGE)Wartung betroffene Dateien neu und aktualisiert deren Statistiken. Deaktivieren Sie die Statistik-Injektion zwischen Wartungszyklen auf Tabellen mit häufigen Aktualisierungen oder Löschungen. - Für Neuberechnen ist ein Neuschreiben oder Statistik-API-Vorgang erforderlich.
- Die Statistikeinfügung gilt nicht für geschachtelte Spalten.
- In einigen Workloads können veraltete oder unvollständige Statistiken zu Regressionen führen.
-
ANALYZE TABLEDer Support ist aufFOR ALL COLUMNS. - Spaltenreihenfolge oder Konfigurationsänderungen können eine vollständige Aktualisierung erfordern.