Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
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:
Opret en ny eventstream. Føj derefter en SQL-operator til den ved hjælp af en af følgende indstillinger:
Der føjes en ny SQL-node til din eventstream. Vælg blyantikonet for at fortsætte med at konfigurere SQL-operatoren.
I ruden SQL Code skal du angive et entydigt navn til SQL-operatornoden i eventstream.
Rediger forespørgslen i forespørgselsområdet, eller vælg Rediger forespørgsel for at åbne visningen af kodeeditoren i fuld skærm.
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.
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.
Angiv et alias eller navn til outputdestinationen, hvor de data, der behandles via SQL-operatoren, skrives.
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) > 75I dette forespørgselseksempel vises en
CASEsæ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 SensorInputBrug kommandoen Test forespørgsel på båndet til at validere transformationslogikken. Testforespørgselsresultater vises under fanen Testresultat .
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.
Hvis knappen Gem er aktiveret i ruden SQL Code, skal du vælge den for at gemme indstillingerne.
Konfigurer destinationen.
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
Vælg Rediger (blyant-ikon) på SQL-operatornoden for at åbne SQL-kodepanelet .
I SQL-kodepanelet vælger du Rediger forespørgsel for at åbne fuldskærms-kodeeditoren.
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.
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.
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(*) > 100Vælg Testforespørgsel for at validere forespørgselsresultatet. Hvert output, der er defineret i forespørgslen, har en separat fane i testresultatpanelet .
Vælg Save for at gemme forespørgslen og forlad editoren.
Vælg Gem igen i SQL Editor-panelet.
Vælg hver destinationsnode, der er oprettet fra SQL-operatoren, og konfigurer derefter destinationsindstillingerne for hver af dem.
Når du har færdiggjort konfigurationen, burde din eventstream se ud som i følgende eksempel, hvor SQL-operatornoden har to outputdestinationer.
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.
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.