Condividi tramite


Configurare e gestire statistiche di tabella automatizzate in Fabric Spark

Si applica a:✅ Ingegneria dei dati e scienza dei dati in Microsoft Fabric

Statistiche di tabella automatizzate in Microsoft Fabric consentono a Spark di ottimizzare l'esecuzione delle query raccogliendo automaticamente metriche dettagliate a livello di tabella. Queste statistiche includono:

  • Numero totale di righe
  • Conteggi di valori nulli per colonna
  • Valori minimi e massimi per colonna
  • Conteggi di valori distinti per colonna
  • Lunghezze medie e massime delle colonne

Per impostazione predefinita, queste statistiche estese vengono raccolte per le prime 32 colonne (incluse le colonne annidate) di ogni tabella Delta creata in Fabric. I dati raccolti aiutano l'ottimizzatore basato sui costi (CBO) di Spark a migliorare la pianificazione delle query per join, filtri, aggregazioni e potatura delle partizioni.

Di conseguenza, i carichi di lavoro possono visualizzare miglioramenti delle prestazioni maggiori e ridurre l'utilizzo delle risorse di calcolo, senza richiedere esecuzioni manuali ANALYZE TABLE o configurazioni complesse.

Vantaggi principali

Questa sezione riepiloga i motivi per cui le statistiche di tabella automatizzate sono importanti per i carichi di lavoro.

  • ~45% prestazioni più veloci su query complesse
  • Abilitata automaticamente nelle nuove tabelle Delta
  • Migliora la pianificazione delle query e riduce i costi di calcolo
  • Supporta conteggi di valori distinti, min/max, conteggi null e metriche di lunghezza delle colonne
  • Archiviato in formato Parquet per evitare di ingrandire i file di dati

Funzionamento

Ecco cosa accade dietro le quinte quando Fabric Spark raccoglie statistiche:

  • Conteggi delle righe
  • Conteggi di valori nulli per colonna
  • Valori minimi e massimi per colonna
  • Conteggi dei valori distinti per colonna
  • Lunghezze medie e massime delle colonne

Queste metriche consentono a Spark di prendere decisioni più intelligenti su come eseguire query, migliorando strategie di join, eliminazione delle partizioni e prestazioni di aggregazione.

Come abilitare o disabilitare

Informazioni su come controllare la raccolta automatica delle statistiche usando le configurazioni di sessione Spark o le proprietà della tabella.

Configurazione sessione

È possibile abilitare o disabilitare la raccolta di statistiche estese e l'inserimento dell'utilità di ottimizzazione a livello di sessione.

Abilitare la raccolta di statistiche estese:

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

Disabilitare la raccolta di statistiche estese:

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

Abilitare l'inserimento delle statistiche in Query Optimizer:

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

Disabilitare l'inserimento delle statistiche:

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

Annotazioni

La raccolta delle statistiche dei log delta (spark.databricks.delta.stats.collect) deve essere abilitata anche (impostazione predefinita: true).

Proprietà tabella (sostituisce le configurazioni di sessione)

Le proprietà della tabella consentono di controllare la raccolta delle statistiche su singole tabelle, sostituendo le impostazioni della sessione.

Abilitare in una tabella:

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

Disabilitare su una tabella

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

Disabilitare l'impostazione automatica delle proprietà della tabella al momento della creazione:

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

Come controllare le statistiche

È possibile esaminare le statistiche raccolte di tabelle e colonne usando le API di Spark, utili per il debug o la convalida.

Controllare il numero di righe e le dimensioni della tabella (esempio Scala):

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

Controllare le statistiche dettagliate delle colonne:

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

Ricalcolazione delle statistiche

A volte le statistiche possono diventare obsolete o parziali, ad esempio dopo le modifiche dello schema o gli aggiornamenti parziali. È possibile ricompilare le statistiche usando questi metodi.

Riscrivere la tabella (nota: questo azzera la cronologia).

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

Approccio consigliato (Fabric Spark >= 3.2.0.19):

StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")

Se lo schema cambia (ad esempio, si aggiungono/eliminano colonne), è necessario rimuovere le statistiche precedenti prima di ricompilare:

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

Utilizzo del comando ANALYZE

Il ANALYZE TABLE comando fornisce un modo manuale per raccogliere statistiche in tutte le colonne, in modo simile a Spark open source.

Eseguire il comando:

ANALYZE TABLE tableName COMPUTE STATISTICS FOR ALL COLUMNS

Abilitare l'inserimento delle statistiche del catalogo:

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

Disabilitare l'inserimento delle statistiche del catalogo:

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

Limitazioni

È importante comprendere le limitazioni correnti delle statistiche automatizzate di Fabric in modo da poter pianificare di conseguenza.

  • Statistiche raccolte solo in fase di scrittura
  • Gli aggiornamenti o le modifiche di altri motori non vengono aggregati
  • Sono incluse solo le prime 32 colonne (incluse le colonne nidificate)
  • Le eliminazioni o gli aggiornamenti possono rendere obsolete le statistiche
  • Nessuna ricompilazione senza riscrivere la tabella o usare l'API
  • Nessun inserimento di statistiche per le colonne nidificate
  • Nessun fallback delle prestazioni → le statistiche possono occasionalmente portare a regressioni
  • ANALYZE TABLE funziona solo con FOR ALL COLUMNS
  • Le modifiche all'ordinamento delle colonne o alla configurazione richiedono la riscrittura completa per aggiornare le statistiche