Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:✅ Punto de conexión para análisis SQL en Microsoft Fabric
En este tutorial, aprenderá a crear una canalización de Microsoft Fabric para realizar un mantenimiento inteligente de tablas.
Esta solución llama al procedimiento almacenado sys.sp_get_table_health_metrics de T-SQL en el extremo de análisis SQL de Lakehouse, evalúa el resultado y ejecuta OPTIMIZE solo cuando la tabla realmente necesita mantenimiento. Este patrón de «comprobar y luego actuar» evita costes de cómputo innecesarios en tablas en buen estado, al tiempo que garantiza que las tablas degradadas reciban mantenimiento automáticamente.
¿Por qué es necesario el mantenimiento?
Las tablas de Lakehouse pueden acumular demasiados archivos Parquet pequeños a lo largo del tiempo, lo que daña el rendimiento de las consultas en el punto de conexión de SQL Analytics.
En lugar de ejecutar OPTIMIZE según una programación fija, independientemente del estado de la tabla, esta canalización toma una decisión fundamentada: primero comprueba el estado de salud de la tabla y solo activa la optimización cuando se detecta una anomalía.
Prerrequisitos
Antes de comenzar, asegúrese de que tiene:
- Un área de trabajo Microsoft Fabric con permisos de colaborador o superior.
- Un Lakehouse en ese espacio de trabajo que contenga al menos una tabla Delta que desea supervisar. En este tutorial se usa una instancia de Lakehouse denominada
SalesDataLakehouse. - Familiaridad con las canalizaciones de datos de Fabric.
- Familiaridad con los cuadernos de Fabric.
Estructura de la solución
La canalización completada tiene esta estructura:
-
Actividad de script: ejecuta
sp_get_table_health_metricsen la tabla de destino y devuelve métricas del estado de la tabla como salida estructurada. -
Actividad de condición: lee
PotentialAnomalyTypedirectamente de la salida del script y comprueba si es mayor que cero. Para obtener más información sobrePotentialAnomalyType, vea Códigos de tipo de anomalía potenciales. -
Actividad del notebook (dentro de la rama True): Ejecuta
OPTIMIZEen la tabla desde un notebook de Spark.
Al final de este tutorial, dispondrá de un notebook que toma parámetros del pipeline y optimiza una tabla cuando se active.
Paso 1: Creación del cuaderno de optimización
El cuaderno recibe el Lakehouse de destino, el esquema y el nombre de la tabla como parámetros de la canalización y luego ejecuta OPTIMIZE mediante Spark SQL.
- En el área de trabajo de Fabric, seleccione + Nuevo elemento>Cuaderno.
- Asigne al cuaderno el nombre Optimize-Table.
- En Ubicación, seleccione la instancia de Lakehouse donde se almacenan las tablas que compruebe. En este ejercicio se usa una instancia de Lakehouse denominada
SalesDataLakehouse. - Selecciona Crear.
Adición de la celda de parámetro
La primera celda define las variables que la canalización sobrescribe en tiempo de ejecución.
En la primera celda, escriba los parámetros siguientes. Los valores no son importantes, y el proceso los sobrescribe en tiempo de ejecución.
# Parameters lakehouse_name = "<LakehouseName>" schema_name = "<SchemaName>" table_name = "<TableName>"Importante
Cómo funciona la parametrización en los cuadernos de Fabric: En tiempo de ejecución, Fabric inserta una nueva celda inmediatamente después de la celda de parámetros que reasigna estas variables con los valores proporcionados por la canalización. Los valores que establezca aquí solo inicializan las variables y mejoran la legibilidad.
Seleccione el menú de celdas (...) >Alternar celda de parámetro para marcar esta celda como una celda de parámetro.
Adición de la celda OPTIMIZE
El OPTIMIZE comando es un comando de Spark SQL, no un comando T-SQL. Debe ejecutarlo en entornos de Spark, como cuadernos, definiciones de trabajos de Spark o la interfaz de mantenimiento de Lakehouse. El punto de conexión de SQL Analytics y el editor de consultas SQL warehouse no admiten este comando directamente.
En la segunda celda, escriba:
full_name = f"{lakehouse_name}.{schema_name}.{table_name}" print(f"Optimizing {full_name} ...") result = spark.sql(f"OPTIMIZE {full_name}") result.show(truncate=False)Agregue celdas de Markdown según sea necesario para documentar correctamente el cuaderno para otros usuarios. El cuaderno finalizado debe tener un aspecto similar al siguiente:
Note
En este ejemplo se contempla un Lakehouse con esquemas habilitados. Ajusta el nombre de tres partes en full_name según corresponda si no usas esquemas de Lakehouse.
Paso 2: Creación de la canalización
En el área de trabajo de Fabric, seleccione + Nuevo elemento>Canalización.
Asigne a la canalización el nombre Check-and-Optimize-Table.
Seleccione el fondo del lienzo de canalización y, a continuación, abra la pestaña Parámetros . Agregue tres parámetros:
Nombre Tipo Valor predeterminado lakehouse_nameString SalesDataLakehouseschema_nameString dbotable_nameString FactSales
Paso 3: Añadir la actividad Script
La actividad Script se ejecuta sys.sp_get_table_health_metrics en el punto de conexión de SQL Analytics y captura el resultado.
Importante
Use la actividad Script , no la actividad Procedimiento almacenado . Solo la actividad Script expone el conjunto de resultados como una salida JSON estructurada que las actividades posteriores pueden analizar.
- En la pestaña Actividades , seleccione Script para agregarlo al lienzo.
- Asígnele el nombre de Check Table Health.
- En la pestaña Configuración :
Conexión: seleccione el punto de conexión de SQL Analytics para Lakehouse. Si no aparece, seleccione Examinar todo en la parte inferior de la lista desplegable y busque el punto de conexión de SQL Analytics de Lakehouse.
Tipo de script: seleccione Consulta.
Script: seleccione Agregar contenido dinámico y escriba la expresión siguiente:
@concat('EXEC sys.sp_get_table_health_metrics ''', pipeline().parameters.schema_name, '.', pipeline().parameters.table_name, '''')
Esta expresión genera el comando SQL que ejecuta el procedimiento almacenado en la tabla de destino, por ejemplo: EXEC sys.sp_get_table_health_metrics 'dbo.FactSales'.
Comprobación de la salida del script
Ejecute la canalización una vez e inspeccione la salida de la actividad de script. Verá un objeto JSON similar al siguiente:
{
"resultSetCount": 1,
"resultSets": [
{
"rowCount": 1,
"rows": [
{
"PotentialAnomalyType": 3,
"PotentialAnomalyDescription": "Too many small files...",
"FileCount": 2688,
"...": "..."
}
]
}
]
}
Importante
El resultado real puede variar en función del estado de la tabla. La clave es que devuelve las columnas expuestas por sys.sp_get_table_health_metrics.
Paso 4: Agregar la actividad Condición If
La actividad If Condition lee PotentialAnomalyType directamente de la salida de la actividad Script y toma una decisión en función de su resultado. Siga estos pasos:
En la pestaña Actividades, seleccione Condición Si para agregar una actividad al lienzo.
Llámelo Comprobar anomalías.
Dibuje una flecha Éxito (verde) desde Comprobar estado de la tabla hasta Comprobar anomalía.
En la pestaña Actividades de la actividad Condición If , establezca la expresión en:
@greater(int(activity('Check Table Health').output.resultSets[0].rows[0]['PotentialAnomalyType']), 0)
Esta expresión lee la primera fila devuelta por sys.sp_get_table_health_metrics, convierte PotentialAnomalyType a un entero y se evalúa como true cuando el valor es mayor que cero, lo que indica que se ha detectado una anomalía en la tabla de destino.
Paso 5: Agregar la actividad notebook (rama True)
Con la actividad If Condition seleccionada, seleccione Editar (icono de lápiz) junto a True. El lienzo cambia a un sublienzo delimitado a la rama True.
Arrastre una actividad notebook al sub lienzo True.
Asígnele el nombre de Ejecutar OPTIMIZE.
En la pestaña Configuración:
Cuaderno: seleccione el cuaderno Optimize-Table que creó en el paso 1.
Expanda Parámetros base y agregue tres filas:
Nombre Tipo Valor lakehouse_nameString @pipeline().parameters.lakehouse_nameschema_nameString @pipeline().parameters.schema_nametable_nameString @pipeline().parameters.table_name
Los tres valores de columna de nombre deben coincidir exactamente con los nombres de variable de la celda de parámetros del cuaderno.
Note
Puede dejar las actividades False vacías. La actividad If Condition interpreta una rama False vacía como una operación nula e indica que la canalización se ha completado correctamente.
La canalización completada debe ser similar a la siguiente:
Paso 6: Validar y ejecutar
Seleccione Validar en la barra de herramientas de canalización para comprobar si hay errores de configuración.
Seleccione Ejecutar para ejecutar la canalización manualmente.
Supervise la ejecución y confirme lo siguiente:
-
Comprobar el estado de la tabla: inspeccione la salida de esta actividad cuando se ejecute. Debería ver el resultado del procedimiento almacenado
sys.sp_get_table_health_metricsen formato JSON. -
Compruebe anomalías: se evalúa correctamente leyendo
PotentialAnomalyTypedirectamente desde la salida del script. -
Ejecute OPTIMIZE (solo si
PotentialAnomalyType > 0): si la actividad Comprobar anomalías evalúa True, revise la entrada de la actividad Run OPTIMIZE para comprobar que usa los parámetros correctos (nombre de Lakehouse, esquema y nombre de tabla) y compruebe la salida para revisar los mensajes de laOPTIMIZEoperación.
-
Comprobar el estado de la tabla: inspeccione la salida de esta actividad cuando se ejecute. Debería ver el resultado del procedimiento almacenado
Limpieza de recursos
Si solo ha creado recursos para este tutorial y ya no los necesita, elimine los siguientes elementos del área de trabajo:
- El proceso Check-and-Optimize-Table.
- El cuaderno Optimize-Table.