Configuración y administración de estadísticas de tablas automatizadas en Fabric Spark

Se aplica a:✅ Ingeniería de datos de tejido y ciencia de datos

Estadísticas de tablas automatizadas en Microsoft Fabric ayudan a Spark a optimizar la ejecución de consultas mediante la recopilación automática de métricas de tablas y columnas para tablas Delta.

  • Recuentos de filas.
  • Recuentos null por columna.
  • Valores mínimos y máximos por columna.
  • Recuentos de valores distintos por columna.
  • Longitud media y máxima de columna.

De forma predeterminada, estas estadísticas extendidas se recopilan para las primeras 32 columnas (incluidas las columnas anidadas) de las tablas Delta en Fabric. Estos datos ayudan al optimizador basado en costos (CBO) de Spark a mejorar la planeación de combinaciones, filtros, agregaciones y eliminación de particiones.

Como resultado, muchas cargas de trabajo pueden reducir la latencia de las consultas y el uso de cómputo con menos mantenimiento manual de estadísticas.

Para obtener instrucciones entre cargas de trabajo sobre las estrategias de optimización de tablas, consulte Optimización y mantenimiento de tablas entre cargas de trabajo.

Ventajas principales

Las estadísticas automatizadas proporcionan las siguientes ventajas:

  • Se habilita automáticamente para las tablas Delta en Fabric.
  • Mejora la calidad del planeamiento de consultas para patrones de análisis comunes.
  • Reduce la necesidad de colección de estadísticas manuales repetidas.
  • Almacena estadísticas fuera de los archivos de datos de tabla para evitar el sobredimensionamiento de archivos de datos.

Cómo funciona

Fabric Spark recopila estadísticas extendidas en tiempo de escritura y las usa durante la planeación.

Ámbito y comportamiento de la colección:

  • Las estadísticas se recopilan en el momento de escritura.
  • La colección tiene como destino las primeras 32 columnas (incluidas las columnas anidadas).
  • Las propiedades de la tabla pueden invalidar el comportamiento de nivel de sesión.
  • La configuración controla si Spark inserta estadísticas en el optimizador.

Estas métricas ayudan a Spark a elegir mejores estrategias de unión, a mejorar la eliminación de particiones y a optimizar los planes de agregación.

Habilitar o deshabilitar la recopilación de estadísticas

Utilice la configuración de sesión (ámbito de área de trabajo o cuaderno) o las propiedades de tabla (ámbito por tabla).

Configuración de la sesión

Puede habilitar o deshabilitar la recopilación de estadísticas extendidas y la inserción del optimizador en el nivel de sesión.

Esta configuración se puede aplicar a través de Spark SQL, PySpark o Scala Spark.

Ejecuta las siguientes sentencias SQL de Spark para habilitar la colección e inyección de optimizadores:

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

Para desactivar cualquiera de los dos ajustes, usa el mismo comando con el valor establecido en false.

Nota:

La recopilación de estadísticas de registro delta () también debe estar habilitada (spark.databricks.delta.stats.collectvalor predeterminado: true).

Important

Si habilita vectores de eliminación en una tabla, deshabilite la inserción de estadísticas para esa tabla. En las tablas que usan vectores de eliminación con actualizaciones o eliminaciones frecuentes, las estadísticas extendidas pueden ser inexactas y hacer que Spark subestime el tamaño de la tabla. Cuando esto sucede, el optimizador puede elegir una combinación de difusión que no sea adecuada, lo que puede provocar un error en las consultas. Para evitar este comportamiento, deshabilite la inserción de estadísticas para que el optimizador no use las estadísticas insertadas:

  • Ámbito de sesión: establecer spark.microsoft.delta.stats.injection.enabled en false.
  • Ámbito de la tabla: establezca la propiedad de tabla delta.stats.extended.inject en false.

Puede mantener habilitada la recopilación de estadísticas. En el caso de las tablas que usan vectores de eliminación, solo deshabilite la inserción en el optimizador.

Una estrategia periódica de mantenimiento de tablas reduce este riesgo. OPTIMIZE purga automáticamente los archivos donde más de 5% de filas están referenciadas por vectores de borrado, y REORG TABLE ... APPLY (PURGE) puede forzar una reescritura por debajo de ese umbral. Como las estadísticas extendidas se recopilan durante la escritura, la reescritura actualiza las estadísticas de los archivos afectados. Para tablas con actualizaciones o eliminaciones frecuentes, mantén la inyección desactivada entre ciclos de mantenimiento.

Propiedades de tabla (invalidación de la configuración de sesión)

Las propiedades de tabla permiten controlar la recopilación de estadísticas en tablas individuales, invalidando la configuración de sesión.

Habilitar en una tabla:

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

Para desactivar cualquiera de las propiedades de la tabla, fije su valor en false.

Comportamiento predeterminado de creación de tablas

Use esta configuración de nivel de sesión para deshabilitar la marca automática de las propiedades de la tabla de estadísticas extendidas cuando se crean nuevas tablas.

Use esta instrucción SQL de Spark para deshabilitar la configuración automática en la creación de tablas:

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

Comprobación de estadísticas

Puedes inspeccionar las estadísticas disponibles en un plan de consulta optimizado usando las APIs de Spark. Estas APIs devolven estadísticas genéricas de planes de cualquier fuente disponible, incluidas las estadísticas del catálogo de Spark. Un resultado no confirma que se hayan recopilado estadísticas extendidas de Fabric para la tabla.

Comprobar el número de filas y el tamaño de la tabla (ejemplo de Scala):

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

Compruebe las estadísticas de columna detalladas:

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

Volver a calcular estadísticas

Las estadísticas pueden quedar obsoletas después de cambios de esquema o actualizaciones parciales. Use uno de los métodos siguientes para volver a calcular.

Vuelva a escribir la tabla (nota: esto restablece el historial):

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

Enfoque recomendado (Fabric Spark >= 3.2.0.19):

from pyspark.sql.delta import StatisticsStore

StatisticsStore.recomputeStatisticsWithCompaction(spark, "testTable1")

Si el esquema cambia (por ejemplo, si añades o eliminas columnas), elimina estadísticas antiguas antes de recalcular:

from pyspark.sql.delta import StatisticsStore

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

Uso de ANALYZE TABLE

Usa ANALYZE TABLE para calcular estadísticas del catálogo de Spark en todas las columnas. Este comando no recalcula las estadísticas extendidas almacenadas por las Estadísticas Automatizadas de Tablas. Para recalcular esas estadísticas, utiliza StatisticsStore.recomputeStatisticsWithCompaction.

Ejecuta el comando:

Ejecute la siguiente instrucción SQL de Spark:

ANALYZE TABLE tableName COMPUTE STATISTICS FOR ALL COLUMNS

Habilite la inserción de estadísticas de catálogo:

Utiliza esta instrucción SQL de Spark para habilitar la inyección de estadísticas de catálogo:

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

Para desactivar la inyección de estadísticas de catálogo, use la misma configuración con el valor establecido en false.

Limitaciones

Es importante comprender las limitaciones actuales de las estadísticas automatizadas de Fabric para que pueda planear en consecuencia.

  • Las estadísticas solo se recopilan durante el proceso de escritura.
  • Las actualizaciones de otros motores no se agregan automáticamente.
  • Solo se incluyen las primeras 32 columnas (incluidas las columnas anidadas).
  • Las eliminaciones y actualizaciones pueden hacer que las estadísticas se vuelvan obsoletas. Para las tablas que usan vectores de borrado, el mantenimiento regular OPTIMIZE o REORG TABLE ... APPLY (PURGE) reescribe los archivos afectados y actualiza sus estadísticas. Desactiva la inyección de estadísticas entre ciclos de mantenimiento en tablas con actualizaciones o eliminaciones frecuentes.
  • El recálculo requiere una operación de API de reescritura o de estadísticas.
  • La inserción de estadísticas no se aplica a las columnas anidadas.
  • En algunas cargas de trabajo, las estadísticas obsoletas o incompletas pueden provocar regresiones.
  • ANALYZE TABLE La compatibilidad está limitada a FOR ALL COLUMNS.
  • Los cambios de configuración o ordenación de columnas pueden requerir una actualización completa.