Freigeben über


Verarbeiten von Ereignissen mithilfe eines SQL-Operators (Vorschau)

Ein SQL-Operator (Vorschau), auch als SQL-Code-Editor bezeichnet, ist eine neue Datentransformationsfunktion in Microsoft Fabric Eventstreams. SQL-Operatoren bieten eine Codebearbeitungsumgebung, in der Sie ihre eigene benutzerdefinierte Datentransformationslogik ganz einfach mithilfe einfacher SQL-Ausdrücke definieren können. In diesem Artikel wird beschrieben, wie Sie einen SQL-Operator für Datentransformationen in einem Eventstream verwenden.

Note

Namen von Ereignisstream-Artefakten, die einen Unterstrich (_) oder Punkt (.) enthalten, sind nicht mit SQL-Operatoren kompatibel. Um eine optimale Erfahrung zu erzielen, erstellen Sie einen neuen Ereignisstream, ohne Unterstriche oder Punkte im Artefaktnamen zu verwenden.

Prerequisites

  • Zugriff auf einen Arbeitsbereich im Modus der Fabric-Kapazitätslizenz oder im Modus der Testlizenz mit Berechtigungen als Beitragende oder höher.

Hinzufügen eines SQL-Operators zu einem Ereignisstream

Um Datenstromverarbeitungsvorgänge für Ihre Datenströme mithilfe eines SQL-Operators auszuführen, fügen Sie ihrem Eventstream mithilfe der folgenden Anweisungen einen SQL-Operator hinzu:

  1. Erstellen Sie einen neuen Eventstream. Fügen Sie dann einen SQL-Operator hinzu, indem Sie eine der folgenden Optionen verwenden:

    • Wählen Sie im Menüband Transformationsereignisse und dann SQL aus.

      Screenshot, der die Auswahl eines SQL-Operators im Menü zum Transformieren von Ereignissen zeigt.

    • Wählen Sie auf der Canvas Transformationsereignisse aus, oder fügen Sie das Ziel hinzu, und wählen Sie dann SQL-Code aus.

      Screenshot, der die Auswahl eines SQL-Operators in der Liste zum Transformieren von Ereignissen auf der Canvas zeigt.

  2. Ihrem Eventstream wird ein neuer SQL-Knoten hinzugefügt. Wählen Sie das Bleistiftsymbol aus, um die Einrichtung des SQL-Operators fortzusetzen.

    Screenshot, der die Auswahl des Bleistiftsymbols vom SQL-Operatorknoten zeigt.

  3. Geben Sie im SQL-Codebereich einen eindeutigen Namen für den SQL-Operatorknoten im Eventstream an.

  4. Bearbeiten Sie die Abfrage im Abfragebereich, oder wählen Sie "Abfrage bearbeiten " aus, um die Vollbild-Code-Editor-Ansicht einzugeben.

    Screenshot des Felds zum Eingeben eines Vorgangsnamens und der Schaltfläche zum Bearbeiten einer Abfrage im SQL-Codebereich.

  5. Der Vollbild-Code-Editor-Modus verfügt über einen Eingabe-/Ausgabe-Explorer-Bereich auf der linken Seite. Der Code-Editor-Abschnitt ist anpassbar, sodass Sie die Größe entsprechend Ihren Wünschen ändern können. Im Vorschauabschnitt unten können Sie sowohl Die Eingabedaten als auch das Testergebnis Ihrer Abfrage anzeigen.

    Screenshot des vollständigen SQL-Editors.

  6. Markieren Sie den Text im Ausgabeabschnitt , und geben Sie dann einen Namen für den Zielknoten ein. Der SQL-Operator unterstützt alle Real-Time Intelligence-Ziele, einschließlich eines Eventhouses, eines Lakehouse, eines Aktivators oder eines Datenstroms.

    Screenshot des Ausgabebereichs, in dem die Schaltfläche

  7. Geben Sie einen Alias oder Namen für das Ausgabeziel an, in dem die über den SQL-Operator verarbeiteten Daten geschrieben werden.

    Screenshot, der den Namen für eine Ausgabe zeigt.

  8. Fügen Sie sql-Abfrage für die erforderliche Datentransformation hinzu.

    Ein Eventstream basiert auf Azure Stream Analytics und unterstützt die gleiche Abfragesemantik der Stream Analytics-Abfragesprache. Weitere Informationen zur Syntax und Verwendung finden Sie unter Azure Stream Analytics und Eventstream Query Language Reference.

    Hier ist die grundlegende Abfragestruktur:

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

    Dieses Abfragebeispiel zeigt die Erkennung von hohen Temperaturen in einem Raum jede Minute:

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

    Dieses Abfragebeispiel zeigt eine CASE Anweisung zum Kategorisieren der 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. Verwenden Sie im Menüband den Befehl " Abfrage testen ", um die Transformationslogik zu überprüfen. Testabfrageergebnisse werden auf der Registerkarte " Testergebnis " angezeigt.

    Screenshot eines Testergebnisses.

  10. Wenn Sie mit dem Testen fertig sind, wählen Sie "Im Menüband speichern " aus, um zum Eventstream-Zeichenbereich zurückzukehren.

    Screenshot des Menübands für eine Abfrage, einschließlich Befehle zum Testen der Abfrage und Zum Speichern.

  11. Wenn die Schaltfläche "Speichern" aktiviert ist, wählen Sie im BEREICH "SQL Code" die Option aus, um die Einstellungen zu speichern.

    Screenshot des SQL-Codebereichs und der Schaltfläche

  12. Konfigurieren Sie das Ziel.

    Screenshot eines abgeschlossenen Ereignisstreams.

Weitere Beispiele

Die folgenden Beispiele zeigen allgemeine Echtzeitanalyseszenarien, die Sie mit dem SQL-Operator implementieren können.

Aggregation von Stadtverkäufen pro Minute – Wird TumblingWindow verwendet, um feste, nicht überlappende Gesamtumsätze pro Minute nach Ort gruppiert zu berechnen:

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

Burst- und Bot-Erkennung – Wird verwendet HoppingWindow , um Benutzer zu erkennen, die eine ungewöhnlich hohe Anzahl von Aufträgen innerhalb eines fünfminütigen Rollfensters platzieren, die jede Minute ausgewertet werden:

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

Anomaliekennzeichnung gegen eine rollierende Basislinie – Verwenden Sie HoppingWindow, um einen gleitenden Durchschnitt zu berechnen und Geräte zu markieren, deren maximaler Metrikwert den doppelten Durchschnitt innerhalb des Fensters überschreitet, was auf eine potenzielle Anomalie hinweist:

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)

Schreiben Sie ausgehend von einem einzelnen SQL-Operator in mehrere Ziele

Mit dem SQL-Operator können Sie Daten an mehrere Ausgabesenken oder Ziele senden, indem Sie ihrer SQL-Abfrage mehrere INTO Klauseln hinzufügen und mehrere Ausgaben definieren.

Definieren mehrerer Ausgaben im Abfrage-Editor

  1. Wählen Sie im SQL-Operatorknoten "Bearbeiten " (Bleistiftsymbol) aus, um den SQL-Codebereich zu öffnen.

  2. Wählen Sie im BEREICH "SQL-Code " die Option "Abfrage bearbeiten" aus, um den Vollbild-Code-Editor zu öffnen.

    Screenshot des SQL-Codebereichs.

  3. Wählen Sie im Vollbild-Code-Editor im Abschnitt + die Option aus, um eine neue Ausgabe hinzuzufügen. Wählen Sie den Ausgabetyp Ihrer Wahl aus. Er erstellt einen Alias der Ausgabe, den Sie in einer Abfrage verwenden können. Wählen Sie den Namen der erstellten Ausgabe aus, und geben Sie einen Namen Ihrer Wahl ein.

    Screenshot der Schaltfläche zum Hinzufügen einer Ausgabe im vollständigen SQL-Editor.

Verwenden Sie mehrere SELECT INTO-Anweisungen

Jede SELECT Anweisung kann in eine andere Ausgabe schreiben. Fügen Sie die Abfrage hinzu, um die Ausgabe in mehrere Zielorte zu schreiben.

Im folgenden Abfragebeispiel schreibt die erste SELECT Anweisung in eine Ausgabe namens RawArchive (Typ: Lakehouse), und die zweite SELECT Anweisung schreibt in eine Ausgabe namens AggregationResults (Typ: 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

Wiederverwendung von Zwischenlogik (bewährte Methode)

Wenn Sie das Duplizieren von Logik vermeiden möchten, verwenden Sie eine WITH-Klausel und verzweigen Sie sich von dort zu mehreren Ausgaben. Im folgenden Beispiel wird der InputStream allgemeine Tabellenausdruck (CTE) so definiert, dass er einmal aus dem Eingabestream gelesen wird, und dann verweisen die beiden SELECT Anweisungen auf das InputStream CTE, um in verschiedene Ausgabeziele zu schreiben. Dieser Ansatz ist effizienter, da das Lesen aus dem Eingabedatenstrom mehrmals vermieden wird.

  1. Geben Sie die folgende Abfrage im SQL-Code-Editor ein, um einmal aus dem Eingabedatenstrom zu lesen und in mehrere Ausgaben zu schreiben.

    
    --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. Wählen Sie "Testabfrage" aus, um das Abfrageergebnis zu überprüfen. Jede in der Abfrage definierte Ausgabe verfügt über eine separate Registerkarte im Bereich " Testergebnisse ".

    Screenshot, der ein Beispiel zum Hinzufügen mehrerer Zielabfragen im SQL-Voll-Editor zeigt.

  3. Wählen Sie "Speichern" aus, um die Abfrage zu speichern und den Editor zu beenden.

    Screenshot der Schaltfläche

  4. Wählen Sie " Speichern" im SQL-Editorbereich erneut aus.

  5. Wählen Sie jeden zielknoten aus, der vom SQL-Operator erstellt wurde, und konfigurieren Sie dann die Zieleinstellungen für jeden dieser Knoten.

    Screenshot der Konfigurationslinks für jeden Zielknoten.

  6. Nachdem Sie die Konfiguration abgeschlossen haben, sollte Ihr Eventstream wie im folgenden Beispiel aussehen, wobei der SQL-Operatorknoten zwei Ausgabeziele aufweist.

    Screenshot, der ein Beispiel für einen SQL-Operator mit mehreren Ausgaben zeigt.

Konfigurieren von Ereignisbestellungsrichtlinien im SQL-Operator

Mit dem SQL-Operator können Sie Daten mithilfe von Ereignis- oder Anwendungszeit verarbeiten. Standardmäßig verwendet Eventstream die Ankunftszeit. Zur Verarbeitung nach Ereigniszeit müssen Sie sie explizit in TIMESTAMP BY Ihrer Abfrage konfigurieren.

Beispieleingabe

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

Beispielabfrage mit Ereigniszeit


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

Sie können auch Schwellenwerte für verspätete Ankunfts- und außerhalb der Reihenfolge auftretende Ereignisse in den erweiterten Einstellungen des SQL-Operators hinzufügen.

Screenshot mit erweiterten Einstellungen eines SQL-Operators.

Limitations

  • Der SQL-Operator ist so konzipiert, dass alle Transformationslogiken zentralisiert werden. Daher können Sie sie nicht zusammen mit anderen integrierten Operatoren innerhalb desselben Verarbeitungspfads verwenden. Das Verketten mehrerer SQL-Operatoren in einem einzigen Pfad wird ebenfalls nicht unterstützt.

  • Der SQL-Operator kann Ausgabedaten nur an den Zielknoten in der Topologie senden.

  • Derzeit werden Ereignisstreamtopologien nur über die Benutzeroberfläche unterstützt. DIE REST-API-Unterstützung für den SQL-Operator ist noch nicht verfügbar.