Geautomatiseerde tabelstatistieken configureren en beheren in Fabric Spark

Van toepassing op:✅ Fabric Data Engineering en Data Science

Geautomatiseerde tabelstatistieken in Microsoft Fabric spark helpen bij het optimaliseren van de uitvoering van query's door automatisch metrische tabel- en kolomgegevens voor Delta-tabellen te verzamelen.

  • Aantal rijen.
  • Aantal 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 Delta-tabellen in Fabric. Deze gegevens helpen de kostengebaseerde optimizer (CBO) van Spark te verbeteren bij het plannen van joins, filters, aggregaties en partitionering.

Als gevolg hiervan kunnen veel workloads de querylatentie en het rekengebruik verminderen met minder handmatig onderhoud aan statistieken.

Zie Onderhoud en optimalisatie van tabellen voor meerdere werkbelastingen voor richtlijnen voor tabeloptimalisatie voor meerdere werkbelastingen.

Belangrijkste voordelen

Geautomatiseerde statistieken bieden de volgende voordelen:

  • Automatisch ingeschakeld voor Delta-tabellen in Fabric.
  • Verbetert de kwaliteit van queryplanning voor algemene analysepatronen.
  • Vermindert de noodzaak voor herhaalde handmatige verzameling statistieken.
  • Slaat statistieken op buiten tabelgegevensbestanden om bloat van gegevensbestanden te voorkomen.

Hoe het werkt

Fabric Spark verzamelt uitgebreide statistieken tijdens schrijftijd en gebruikt deze tijdens de planning.

Bereik en gedrag van verzameling:

  • Statistieken worden verzameld tijdens schrijftijd.
  • De verzameling richt zich op de eerste 32 kolommen (inclusief geneste kolommen).
  • Tabeleigenschappen kunnen gedrag op sessieniveau overschrijven.
  • Configuratie bepaalt of Spark statistieken in de optimizer injecteert.

Deze metrische gegevens helpen Spark betere joinstrategieën te kiezen, partities te verwijderen en aggregatieplannen te optimaliseren.

Verzameling statistieken in- of uitschakelen

Gebruik sessieconfiguratie (werkruimte- of notebookbereik) of tabeleigenschappen (bereik per tabel).

Sessieconfiguratie

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

Deze instellingen kunnen worden toegepast via Spark SQL, PySpark of Scala Spark.

Voer de volgende Spark SQL-instructies uit om verzameling en optimalisatie-injectie mogelijk te maken:

SET spark.microsoft.delta.stats.collect.extended=true;
SET spark.microsoft.delta.stats.injection.enabled=true;

Om een van beide instellingen uit te schakelen, gebruik je hetzelfde commando met de waarde op false.

Opmerking

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

Important

Als u verwijderingsvectoren voor een tabel inschakelt, schakelt u statistiekeninjectie voor die tabel uit. Bij tabellen die gebruikmaken van verwijderingsvectoren met frequente updates of verwijderingen, kunnen de uitgebreide statistieken onnauwkeurig worden, waardoor Spark de tabelgrootte kan onderschatten. Als dit gebeurt, kan de optimizer een broadcast-join kiezen die niet geschikt is, waardoor query's mislukken. U kunt dit gedrag voorkomen door statistiekeninjectie uit te schakelen, zodat de optimizer geen gebruik maakt van de geïnjecteerde statistieken:

  • Sessiebereik: stel spark.microsoft.delta.stats.injection.enabled in op false.
  • Tabelbereik: stel de delta.stats.extended.inject tabeleigenschap in op false.

U kunt het verzamelen van statistieken ingeschakeld houden. Voor tabellen die verwijderingsvectoren gebruiken, schakelt u alleen injectie uit in de optimizer.

Een regelmatige tafelonderhoudsstrategie vermindert dit risico. OPTIMIZE Automatisch verwijdert bestanden waarbij meer dan 5% rijen worden aangeduid door verwijdervectoren, en REORG TABLE ... APPLY (PURGE) kan een herschrijving onder die drempel afdwingen. Omdat uitgebreide statistieken tijdens het schrijven worden verzameld, verversen de herschrijving de statistieken voor de getroffen bestanden. Voor tabellen met frequente updates of verwijderingen, houd injectie uitgeschakeld tussen onderhoudscycli.

Tabeleigenschappen (sessieconfiguratie 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'
)

Om een van beide tabeleigenschappen uit te schakelen, stel je de waarde in op false.

Standaardgedrag voor het maken van tabellen

Gebruik deze instelling op sessieniveau om automatische stempeling van tabeleigenschappen voor uitgebreide statistieken uit te schakelen wanneer er nieuwe tabellen worden gemaakt.

Gebruik deze Spark SQL-instructie om automatisch instellen bij het maken van tabellen uit te schakelen:

SET spark.microsoft.delta.stats.collect.extended.property.setAtTableCreation=false;

Statistieken controleren

Je kunt de statistieken die beschikbaar zijn voor een geoptimaliseerd queryplan inspecteren met behulp van Spark API's. Deze API's geven generieke planstatistieken terug van elke beschikbare bron, inclusief Spark-catalogusstatistieken. Uit een resultaat blijkt niet dat uitgebreide Fabric-statistieken voor de tabel zijn verzameld.

Aantal rijen en tabelgrootte controleren (Scala-voorbeeld):

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

Gedetailleerde kolomstatistieken controleren:

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

Statistieken opnieuw compileren

Statistieken kunnen verouderd raken nadat schemawijzigingen of gedeeltelijke updates zijn doorgevoerd. Gebruik een van de volgende methoden om het opnieuw te berekenen.

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

from pyspark.sql.delta import StatisticsStore

StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")

Als het schema verandert (bijvoorbeeld als je kolommen toevoegt of verwijdert), verwijder dan oude statistieken voordat je opnieuw berekent:

from pyspark.sql.delta import StatisticsStore

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

ANALYZE TABLE gebruiken

ANALYZE TABLE Gebruik om Spark-catalogusstatistieken over alle kolommen te berekenen. Dit commando berekent de uitgebreide statistieken die door Automated Table Statistics worden opgeslagen niet. Om die statistieken opnieuw te berekenen, gebruik StatisticsStore.recomputeStatisticsWithCompaction.

Voer de opdracht uit:

Voer de volgende Spark SQL-instructie uit:

ANALYZE TABLE tableName COMPUTE STATISTICS FOR ALL COLUMNS

Catalogusstatistiekeninjectie inschakelen:

Gebruik deze Spark SQL-instructie om catalogusstatistiekinjectie mogelijk te maken:

SET spark.microsoft.delta.stats.injection.catalog.enabled=true;

Om catalogisstatistiekinjectie uit te schakelen, gebruik je dezelfde instelling met de waarde ingesteld op false.

Beperkingen

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

  • Statistieken worden alleen tijdens schrijftijd verzameld.
  • Updates van andere engines worden niet automatisch samengevoegd.
  • Alleen de eerste 32 kolommen worden opgenomen (inclusief geneste kolommen).
  • Verwijderingen en updates kunnen statistieken verouderd maken. Voor tabellen die verwijderingsvectoren gebruiken, herschrijft regulier OPTIMIZE of REORG TABLE ... APPLY (PURGE) onderhoud getroffen bestanden en ververst hun statistieken. Schakel statistiekinjectie uit tussen onderhoudscycli op tabellen met frequente updates of verwijderingen.
  • Voor het opnieuw compileren is een herschrijf- of statistieken-API-bewerking vereist.
  • Statistiekeninjectie is niet van toepassing op geneste kolommen.
  • In sommige workloads kunnen verouderde of onvolledige statistieken leiden tot regressies.
  • ANALYZE TABLE ondersteuning is beperkt tot FOR ALL COLUMNS.
  • Wijzigingen in kolomvolgorde of configuratie kunnen een volledige vernieuwingsactie vereisen.