Del via


Behandle hændelser ved hjælp af en SQL-operator (prøveversion)

En SQL-operator (forhåndsvisning), også kaldet en SQL-kodeeditor, er en ny datatransformationsfunktion i Microsoft Fabric eventstreams. SQL-operatorer giver en koderedigeringsoplevelse, hvor du nemt kan definere din egen brugerdefinerede datatransformationslogik ved hjælp af enkle SQL-udtryk. I denne artikel beskrives det, hvordan du bruger en SQL-operator til datatransformationer i en hændelsesstrøm.

Note

Eventstream-artefaktnavne, der indeholder en understregning (_) eller prik (.), er ikke kompatible med SQL-operatorer. Du får den bedste oplevelse ved at oprette en ny eventstream uden at bruge understregningstegn eller prikker i artefaktnavnet.

Prerequisites

  • Adgang til et arbejdsområde i Fabric-kapacitetslicenstilstanden eller prøvelicenstilstanden med bidragyder eller højere tilladelser.

Føje en SQL-operator til en hændelsesstrøm

Hvis du vil udføre strømbehandlingshandlinger på dine datastrømme ved hjælp af en SQL-operator, skal du føje en SQL-operator til din eventstream ved hjælp af følgende instruktioner:

  1. Opret en ny eventstream. Føj derefter en SQL-operator til den ved hjælp af en af følgende indstillinger:

    • Vælg Transformér hændelser på båndet, og vælg derefter SQL.

      Skærmbillede, der viser valget af en SQL-operator i menuen til transformering af hændelser.

    • Vælg Transformér hændelser eller tilføj destination på lærredet, og vælg derefter SQL Code.

      Skærmbillede, der viser valget af en SQL-operator på listen til transformering af hændelser på lærredet.

  2. Der føjes en ny SQL-node til din eventstream. Vælg blyantikonet for at fortsætte med at konfigurere SQL-operatoren.

    Skærmbillede, der viser valget af blyantsikonet på SQL-operatornoden.

  3. I ruden SQL Code skal du angive et entydigt navn til SQL-operatornoden i eventstream.

  4. Rediger forespørgslen i forespørgselsområdet, eller vælg Rediger forespørgsel for at åbne visningen af kodeeditoren i fuld skærm.

    Skærmbillede, der viser feltet til indtastning af et handlingsnavn og knappen til redigering af en forespørgsel i SQL-koderuden.

  5. Fuldskærmskoderedigeringstilstanden har en input/output-stifinderrude i venstre side. Kodeeditorsektionen er justerbar, så du kan ændre størrelsen på den efter dine præferencer. Eksempelsektionen nederst giver dig mulighed for at få vist både dine inputdata og din forespørgsels testresultat.

    Skærmbillede, der viser SQL Full Editor.

  6. Markér teksten i sektionen Output , og angiv derefter et navn til destinationsnoden. SQL-operatoren understøtter alle Real-Time Intelligence-destinationer, herunder et eventhouse, søhus, aktivator eller stream.

    Skærmbillede, der viser området Output med plusknappen valgt.

  7. Angiv et alias eller navn til outputdestinationen, hvor de data, der behandles via SQL-operatoren, skrives.

    Skærmbillede, der viser navnet på et output.

  8. Tilføj SQL-forespørgsel for den påkrævede datatransformation.

    En eventstream er bygget oven på Azure Stream Analytics og understøtter den samme forespørgselssemantik som Stream Analytics forespørgselssproget. For at lære mere om syntaksen og brugen, se Azure Stream Analytics og Eventstream Query Language Reference.

    Her er den grundlæggende forespørgselsstruktur:

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

    I dette forespørgselseksempel vises registreringen af høje temperaturer i et rum hvert minut:

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

    I dette forespørgselseksempel vises en CASE sætning til kategorisering af temperatur:

    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. Brug kommandoen Test forespørgsel på båndet til at validere transformationslogikken. Testforespørgselsresultater vises under fanen Testresultat .

    Skærmbillede, der viser et testresultat.

  10. Når du er færdig med at teste, skal du vælge Gem på båndet for at vende tilbage til eventstream-lærredet.

    Skærmbillede, der viser båndet for en forespørgsel, herunder kommandoer til test af forespørgslen og lagring.

  11. Hvis knappen Gem er aktiveret i ruden SQL Code, skal du vælge den for at gemme indstillingerne.

    Skærmbillede, der viser SQL-koderuden og knappen Gem.

  12. Konfigurer destinationen.

    Skærmbillede, der viser en fuldført eventstream.

Flere eksempler

Følgende eksempler viser almindelige realtidsanalysescenarier, du kan implementere med SQL-operatoren.

Samlet salg pr. minut – Bruges TumblingWindow til at beregne faste, ikke-overlappende ét-minuts salgstal grupperet efter by:

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

Burst- og botdetektion – Bruges HoppingWindow til at opdage brugere, der afgiver et usædvanligt højt antal ordrer inden for et fem minutters rullende vindue, evalueret hvert minut:

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

Anomaliflagning mod en rullende baseline – Brug HoppingWindow til at beregne et rullende gennemsnit og markere enheder, hvis maksimale metrikværdi overstiger det dobbelte af gennemsnittet inden for vinduet, hvilket indikerer en potentiel anomali:

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)

Skriv til flere destinationer fra en enkelt SQL-operator

Med SQL operator kan du sende data til flere output-sinks eller destinationer ved at tilføje flere INTO klausuler i din SQL-forespørgsel og ved at definere flere outputs.

Definer flere output i forespørgselseditoren

  1. Vælg Rediger (blyant-ikon) på SQL-operatornoden for at åbne SQL-kodepanelet .

  2. I SQL-kodepanelet vælger du Rediger forespørgsel for at åbne fuldskærms-kodeeditoren.

    Skærmbillede, der viser SQL-kodepanelet.

  3. I fuldskærmskodeeditoren skal du vælge + i afsnittet Outputs for at tilføje et nyt output. Vælg den outputtype, du ønsker. Den opretter et alias for outputtet, som du kan bruge i en forespørgsel. Vælg navnet på det oprettede output og indtast et navn efter eget valg.

    Skærmbillede, der viser knappen til at tilføje output i SQL-editoren.

Brug flere SELECT ... INTO-udsagn

Hver SELECT sætning kan skrive til et forskelligt output. Tilføj forespørgslen for at skrive output til flere destinationer.

I det følgende forespørgselseksempel skriver den første SELECT sætning til et output kaldet RawArchive (type: Lakehouse), og det andet SELECT statement skriver til et output kaldet AggregationResults (type: 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

Genbrug mellemliggende logik (bedste praksis)

Hvis du vil undgå at duplikere logik, brug en WITH-klausul og spred ud til flere output derfra. I det følgende eksempel defineres common InputStream table-udtrykket (CTE) til at læse fra inputstrømmen én gang, og derefter refererer de to SELECT sætninger til CTE'en InputStream for at skrive til forskellige output. Denne tilgang er mere effektiv, fordi den undgår at læse fra inputstrømmen flere gange.

  1. Indtast følgende forespørgsel i SQL-kodeeditoren for at læse fra inputstrømmen én gang og skrive til flere output.

    
    --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. Vælg Testforespørgsel for at validere forespørgselsresultatet. Hvert output, der er defineret i forespørgslen, har en separat fane i testresultatpanelet .

    Skærmbillede, der viser et eksempel på at tilføje flere destinationsforespørgsler i SQL-editoren.

  3. Vælg Save for at gemme forespørgslen og forlad editoren.

    Skærmbillede, der viser gem-knappen i SQL's fulde editor.

  4. Vælg Gem igen i SQL Editor-panelet.

  5. Vælg hver destinationsnode, der er oprettet fra SQL-operatoren, og konfigurer derefter destinationsindstillingerne for hver af dem.

    Skærmbillede, der viser konfigurationslinks for hver destinationsnode.

  6. Når du har færdiggjort konfigurationen, burde din eventstream se ud som i følgende eksempel, hvor SQL-operatornoden har to outputdestinationer.

    Skærmbillede, der viser et eksempel på en SQL-operator med flere output.

Konfigurer hændelsesordningspolitikker i SQL-operatoren

Med SQL-operator kan du behandle data ved hjælp af event- eller applikationstid. Som standard bruger Eventstream ankomsttid. For at behandle efter hændelsestid skal du eksplicit konfigurere det TIMESTAMP BY i din forespørgsel.

Prøveinput

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

Eksempelforespørgsel ved brug af event time


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

Du kan også tilføje tærskler for sene ankomster og ude af rækkefølge under avancerede indstillinger i SQL-operatoren.

Skærmbillede, der viser avancerede indstillinger for en SQL-operator.

Limitations

  • SQL-operatoren er designet til at centralisere al din transformationslogik. Derfor kan du ikke bruge den sammen med andre indbyggede operatorer inden for den samme behandlingssti. Sammenkædning af flere SQL-operatorer i en enkelt sti understøttes heller ikke.

  • SQL-operatoren kan sende outputdata til kun destinationsnoden i topologien.

  • I øjeblikket understøttes oprettelse af eventstream-topologier kun via brugergrænsefladen. REST API-understøttelse af SQL-operatoren er ikke tilgængelig endnu.