Compartir vía


Procesamiento de eventos mediante un operador SQL (versión preliminar)

Un operador SQL (versión preliminar), también denominado editor de código SQL, es una nueva funcionalidad de transformación de datos en las secuencias de eventos de Microsoft Fabric. Los operadores SQL proporcionan una experiencia de edición de código donde puede definir fácilmente su propia lógica de transformación de datos personalizada mediante expresiones SQL simples. En este artículo se describe cómo usar un operador SQL para transformaciones de datos en una secuencia de eventos.

Note

Los nombres de artefactos de eventstream que incluyen un carácter de subrayado (_) o punto (.) no son compatibles con los operadores SQL. Para obtener la mejor experiencia, cree una nueva secuencia de eventos sin usar caracteres de subrayado ni puntos en el nombre del artefacto.

Prerequisites

  • Acceso a un área de trabajo en el modo de licencia de capacidad de Fabric o el modo de licencia de prueba con permisos Colaborador o superior.

Adición de un operador SQL a una secuencia de eventos

Para realizar operaciones de procesamiento de flujos en los flujos de datos mediante un operador SQL, agregue un operador SQL a la secuencia de eventos mediante las instrucciones siguientes:

  1. Cree una nueva secuencia de eventos. A continuación, agregue un operador SQL a él mediante una de las siguientes opciones:

    • En la cinta de opciones, seleccione Transformar eventos y, a continuación, seleccione SQL.

      Captura de pantalla que muestra la selección de un operador SQL en el menú para transformar eventos.

    • En el lienzo, seleccione Transformar eventos o agregar destino y, a continuación, seleccione Código SQL.

      Captura de pantalla que muestra la selección de un operador SQL en la lista para transformar eventos en el lienzo.

  2. Se agrega un nuevo nodo SQL al flujo de eventos. Seleccione el icono de lápiz para continuar configurando el operador SQL.

    Captura de pantalla que muestra la selección del icono de lápiz en el nodo del operador SQL.

  3. En el panel Código SQL , especifique un nombre único para el nodo del operador SQL en el flujo de eventos.

  4. Edite la consulta en el área de consulta o seleccione Editar consulta para ingresar a la vista del editor de código en pantalla completa.

    Captura de pantalla que muestra el cuadro para escribir un nombre de operación y el botón para editar una consulta en el panel Código SQL.

  5. El modo de editor de código de pantalla completa incluye un panel del explorador de entrada/salida en el lado izquierdo. La sección del editor de código es ajustable, por lo que puede cambiar su tamaño según sus preferencias. La sección de vista previa de la parte inferior le permite ver los datos de entrada y el resultado de la prueba de la consulta.

    Captura de pantalla que muestra el editor completo de SQL.

  6. Seleccione el texto de la sección Salidas y escriba un nombre para el nodo de destino. El operador SQL admite todos los destinos de inteligencia de Real-Time, incluido un centro de eventos, lakehouse, activador o secuencia.

    Captura de pantalla que muestra el área Resultados con el botón de añadir seleccionado.

  7. Especifique un alias o un nombre para el destino de salida donde se escriben los datos procesados a través del operador SQL.

    Captura de pantalla que muestra el nombre de una salida.

  8. Agregue una consulta SQL para la transformación de datos necesaria.

    Una secuencia de eventos se basa en Azure Stream Analytics y admite la misma semántica de consulta del lenguaje de consulta de Stream Analytics. Para obtener más información sobre la sintaxis y el uso, consulte Azure Stream Analytics y Eventstream Query Language Reference.

    Esta es la estructura de consulta básica:

    SELECT 
    
        column1, column2, ... 
    
    INTO 
    
        [output alias] 
    
    FROM 
    
        [input alias] 
    

    En este ejemplo de consulta se muestra la detección de temperaturas altas en una sala cada minuto:

    
        SELECT 
        System.Timestamp AS WindowEnd, 
        roomId, 
        AVG(temperature) AS AvgTemp 
    INTO 
        output 
    FROM 
        input 
    GROUP BY 
        roomId, 
        TumblingWindow(minute, 1) 
    HAVING 
        AVG(temperature) > 75 
    

    En este ejemplo de consulta se muestra una CASE instrucción para clasificar la temperatura:

    SELECT
        deviceId, 
        temperature, 
        CASE  
            WHEN temperature > 85 THEN 'High' 
            WHEN temperature BETWEEN 60 AND 85 THEN 'Normal' 
            ELSE 'Low' 
        END AS TempCategory 
    INTO 
        CategorizedTempOutput 
    FROM 
        SensorInput 
    
  9. En la cinta de opciones, use el comando Test query para validar la lógica de transformación. Los resultados de la consulta de prueba aparecen en la pestaña Resultado de la prueba .

    Captura de pantalla que muestra un resultado de prueba.

  10. Cuando finalice la prueba, seleccione Guardar en la cinta de opciones para volver al lienzo de eventstream.

    Captura de pantalla que muestra la cinta de opciones de una consulta, incluidos los comandos para probar la consulta y guardarla.

  11. En el panel Código SQL , si el botón Guardar está habilitado, selecciónelo para guardar la configuración.

    Captura de pantalla que muestra el panel Código SQL y el botón Guardar.

  12. Configura el destino.

    Captura de pantalla que muestra una secuencia de eventos completada.

Más ejemplos

En los ejemplos siguientes se muestran escenarios comunes de análisis en tiempo real que puede implementar con el operador SQL.

Agregación de ventas por ciudad por minuto : se usa TumblingWindow para calcular totales fijos y no superpuestos de ventas de un minuto agrupados por ciudad:

SELECT
    System.Timestamp AS WindowEnd,
    city,
    SUM(salesAmount) AS TotalSales
INTO
    output
FROM
    input
GROUP BY
    city,
    TumblingWindow(minute, 1)

Detección de ráfagas y bots : use HoppingWindow para detectar usuarios que coloquen un número inusualmente alto de pedidos en un período gradual de cinco minutos, evaluados cada minuto:

SELECT
    System.Timestamp AS WindowEnd,
    userId,
    COUNT(*) AS OrderCount
INTO
    output
FROM
    input
GROUP BY
    userId,
    HoppingWindow(minute, 5, 1)
HAVING
    COUNT(*) > 10

Anomalías marcadas con una línea base gradual : se usa HoppingWindow para calcular un promedio gradual y marcar los dispositivos cuyo valor máximo de métrica supera el doble del promedio dentro de la ventana, lo que indica una posible anomalía:

SELECT
    System.Timestamp AS WindowEnd,
    deviceId,
    AVG(metricValue) AS RollingAvg,
    MAX(metricValue) AS CurrentMax
INTO
    output
FROM
    input
GROUP BY
    deviceId,
    HoppingWindow(minute, 10, 1)
HAVING
    MAX(metricValue) > 2 * AVG(metricValue)

Escritura en varios destinos desde un único operador SQL

Con el operador SQL, puede enviar datos a varios receptores de salida o destinos agregando varias INTO cláusulas en la consulta SQL y definiendo varias salidas.

Definición de varias salidas en el editor de consultas

  1. Seleccione Editar (icono de lápiz) en el nodo operador SQL para abrir el panel Código SQL .

  2. En el panel Código SQL , seleccione Editar consulta para abrir el editor de código de pantalla completa.

    Captura de pantalla que muestra el panel Código SQL.

  3. En el editor de código de pantalla completa, seleccione + en la sección Salidas para agregar una nueva salida. Seleccione el tipo de salida que prefiera. Crea un alias de la salida que se puede usar en una consulta. Seleccione el nombre de la salida creada y escriba un nombre de su elección.

    Captura de pantalla que muestra el botón para agregar una salida en el editor completo de SQL.

Usa múltiples instrucciones SELECT ... INTO

Cada SELECT instrucción puede escribir en una salida diferente. Agregue la consulta para escribir la salida en varios destinos.

En el ejemplo de consulta siguiente, la primera SELECT instrucción escribe en una salida denominada RawArchive (tipo: Lakehouse) y la segunda SELECT instrucción escribe en una salida denominada AggregationResults (tipo: Eventhouse).


-- Query 1: Archive all data to Lakehouse
SELECT *
INTO [RawArchive]
FROM [SQLDemoES-stream]

-- Query 2: Aggregate and filter data to create a real time dashboard to an Eventhouse
SELECT System.Timestamp() AS EventTime, COUNT(*) AS EventCount
INTO [AggregationResults]
FROM [SQLDemoES-stream]
GROUP BY TumblingWindow(minute, 1)
HAVING COUNT(*) > 100

Reutilización de la lógica intermedia (procedimiento recomendado)

Si desea evitar la duplicación de la lógica, use una cláusula WITH y distribuya las salidas a múltiples destinos desde allí. En el ejemplo siguiente, la InputStream expresión de tabla común (CTE) se define para leer desde el flujo de entrada una vez y, a continuación, las dos SELECT instrucciones hacen referencia al InputStream CTE para escribir en diferentes salidas. Este enfoque es más eficaz porque evita la lectura del flujo de entrada varias veces.

  1. Escriba la consulta siguiente en el editor de código SQL para leer del flujo de entrada una vez y escribir en varias salidas.

    
    --Base query:  Reading input stream once
    With InputStream AS(
    SELECT * 
    FROM [SQLDemoES-stream] )
    
    -- Query 1: Archive all data to Lakehouse
    SELECT *
    INTO [RawArchive]
    FROM InputStream
    
    -- Query 2: Aggregate and filter data to create a real time dashboard to an Eventhouse
    SELECT System.Timestamp() AS EventTime, COUNT(*) AS EventCount
    INTO [AggregationResults]
    FROM InputStream
    GROUP BY TumblingWindow(minute, 1)
    HAVING COUNT(*) > 100
    
    
  2. Seleccione Test query (Probar consulta ) para validar el resultado de la consulta. Cada salida definida en la consulta tiene una pestaña independiente en el panel Resultados de la prueba .

    Captura de pantalla que muestra un ejemplo de cómo agregar varias consultas de destino en el editor completo de SQL.

  3. Seleccione Guardar para guardar la consulta y salir del editor.

    Captura de pantalla que muestra el botón Guardar en el editor completo de SQL.

  4. Seleccione Guardar de nuevo en el panel Editor de SQL.

  5. Seleccione cada nodo de destino creado desde el operador SQL y, a continuación, configure las opciones de destino para cada uno de ellos.

    Captura de pantalla que muestra los vínculos de configuración de cada nodo de destino.

  6. Después de finalizar la configuración, el flujo de eventos debe ser similar al ejemplo siguiente, donde el nodo del operador SQL tiene dos destinos de salida.

    Captura de pantalla que muestra un ejemplo de un operador SQL con varias salidas.

Configuración de directivas de ordenación de eventos en el operador SQL

Con el operador SQL, puede procesar datos mediante el evento o la hora de la aplicación. De forma predeterminada, Eventstream usa la hora de llegada. Para procesar por tiempo de evento, debe configurarlo explícitamente mediante TIMESTAMP BY en la consulta.

Entrada de ejemplo

{
    "deviceId": "device123",
    "temperature": 72,
    "eventTime": "2024-01-01T12:00:00Z"
}

Consulta de ejemplo mediante la hora del evento


SELECT
    deviceId,
    temperature,
    System.Timestamp() AS EventTimestamp
INTO
    Output
FROM
    Input
TIMESTAMP BY eventTime;

También puede agregar umbrales para los eventos de llegada tardía y desorden en la configuración avanzada del operador SQL.

Captura de pantalla que muestra la configuración avanzada de un operador SQL.

Limitations

  • El operador SQL está diseñado para centralizar toda la lógica de transformación. Como resultado, no se puede usar junto con otros operadores integrados dentro de la misma ruta de procesamiento. Tampoco se admite el encadenamiento de varios operadores SQL en una sola ruta de acceso.

  • El operador SQL puede enviar datos de salida solo al nodo de destino de la topología.

  • Actualmente, la creación de topologías de eventstream solo se admite a través de la interfaz de usuario. La compatibilidad con la API REST para el operador SQL aún no está disponible.