Optimice las tablas de Lakehouse basándose en las comprobaciones de estado

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:

Estructura de la solución

La canalización completada tiene esta estructura:

  1. Actividad de script: ejecuta sp_get_table_health_metrics en la tabla de destino y devuelve métricas del estado de la tabla como salida estructurada.
  2. Actividad de condición: lee PotentialAnomalyType directamente de la salida del script y comprueba si es mayor que cero. Para obtener más información sobre PotentialAnomalyType, vea Códigos de tipo de anomalía potenciales.
  3. Actividad del notebook (dentro de la rama True): Ejecuta OPTIMIZE en 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.

  1. En el área de trabajo de Fabric, seleccione + Nuevo elemento>Cuaderno.
  2. Asigne al cuaderno el nombre Optimize-Table.
  3. 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.
  4. 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.

  1. 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.

  2. 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.

  1. 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)
    
  2. 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:

    Captura de pantalla de un cuaderno de Fabric titulado

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

  1. En el área de trabajo de Fabric, seleccione + Nuevo elemento>Canalización.

  2. Asigne a la canalización el nombre Check-and-Optimize-Table.

  3. 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_name String SalesDataLakehouse
    schema_name String dbo
    table_name String 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.

  1. En la pestaña Actividades , seleccione Script para agregarlo al lienzo.
  2. Asígnele el nombre de Check Table Health.
  3. 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:

  1. En la pestaña Actividades, seleccione Condición Si para agregar una actividad al lienzo.

  2. Llámelo Comprobar anomalías.

  3. Dibuje una flecha Éxito (verde) desde Comprobar estado de la tabla hasta Comprobar anomalía.

  4. 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.

  1. Arrastre una actividad notebook al sub lienzo True.

  2. Asígnele el nombre de Ejecutar OPTIMIZE.

  3. 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_name String @pipeline().parameters.lakehouse_name
      schema_name String @pipeline().parameters.schema_name
      table_name String @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:

Captura de pantalla de una canalización de datos de Fabric con una actividad de script Check Table Health conectada a una actividad condicional Check Anomaly. La rama verdadera ejecuta una actividad de cuaderno OPTIMIZE, mientras que la rama falsa no tiene actividades.

Paso 6: Validar y ejecutar

  1. Seleccione Validar en la barra de herramientas de canalización para comprobar si hay errores de configuración.

  2. Seleccione Ejecutar para ejecutar la canalización manualmente.

  3. Supervise la ejecución y confirme lo siguiente:

    1. 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_metrics en formato JSON.
    2. Compruebe anomalías: se evalúa correctamente leyendo PotentialAnomalyType directamente desde la salida del script.
    3. 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 la OPTIMIZE operación.

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.