Nota
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare ad accedere o a cambiare directory.
L'accesso a questa pagina richiede l'autorizzazione. Puoi provare a cambiare directory.
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 TABLEfunziona solo conFOR ALL COLUMNS - Le modifiche all'ordinamento delle colonne o alla configurazione richiedono la riscrittura completa per aggiornare le statistiche