Erstellen eines Datenstreamingauftrags in Azure SQL Edge

Wichtig

Azure SQL Edge unterstützt die ARM64-Plattform nicht mehr.

In diesem Artikel wird das Erstellen eines T-SQL-Streamingauftrags in Azure SQL Edge beschrieben. Sie erstellen die externen Streameingabe- und -Ausgabeobjekte und definieren dann die Abfrage des Streamingauftrags im Rahmen der Erstellung des Streamingauftrags.

Konfigurieren der externen Streameingabe- und -ausgabeobjekte

T-SQL-Streaming verwendet die Funktionen der externen Datenquelle von SQL Server, um die Datenquellen zu definieren, die den externen Streameingaben und -ausgaben des Streamingauftrags zugeordnet sind. Verwenden Sie die folgenden T-SQL-Befehle, um ein externes Streameingabe- oder -ausgabeobjekt zu erstellen:

Wenn Azure SQL Edge, SQL Server oder Azure SQL-Datenbank als Ausgabestream verwendet wird, benötigen Sie außerdem den Befehl CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). Dieser T-SQL-Befehl definiert die Anmeldeinformationen für den Zugriff auf die Datenbank.

Unterstützte Datenquellen für Eingabe- und Ausgabestreams

Azure SQL Edge unterstützt derzeit nur die folgenden Datenquellen als Streameingaben und -ausgaben.

Datenquellentyp Eingabe Ausgabe Beschreibung
Azure IoT Edge Hub J J Datenquelle zum Lesen und Schreiben von Streamingdaten in einen Azure IoT Edge Hub. Weitere Informationen finden Sie unter IoT Edge Hub.
SQL-Datenbank N J Datenquellenverbindung, um Streamingdaten in SQL-Datenbank zu schreiben. Die Datenbank kann eine lokale Datenbank in Azure SQL Edge oder eine Remotedatenbank in SQL Server oder Azure SQL-Datenbank sein.
Kafka J N Datenquelle zum Lesen von Streamingdaten aus einem Kafka-Thema.

Beispiel: Erstellen eines externen Datenstromeingabe-/Ausgabeobjekts für den Azure IoT Edge-Hub

Im folgenden Beispiel wird ein externes Streamobjekt für Azure IoT Edge Hub erstellt. Zum Erstellen einer externen Streameingabe-/-ausgabedatenquelle für Azure IoT Edge Hub müssen Sie zunächst ein externes Dateiformat, um das Layout der Daten zu verstehen, die gelesen oder geschrieben werden.

  1. Erstellen eines externen Dateiformats vom Typ JSON.

    CREATE EXTERNAL FILE format InputFileFormat
    WITH (FORMAT_TYPE = JSON);
    GO
    
  2. Erstellen Sie eine externe Datenquelle für den Azure IoT Edge Hub. Das folgende T-SQL-Skript erstellt eine Datenquellenverbindung mit einem IOT Edge Hub, der auf demselben Docker-Host wie Azure SQL Edge ausgeführt wird.

    CREATE EXTERNAL DATA SOURCE EdgeHubInput
    WITH (LOCATION = 'edgehub://');
    GO
    
  3. Erstellen Sie das externe Streamobjekt für den Azure IoT Edge Hub. Das folgende T-SQL-Skript erstellt ein Streamobjekt für den IoT Edge Hub. Im Fall eines IoT Edge Hub-Streamobjekts ist der LOCATION-Parameter der Name des IoT Edge Hub-Themas oder -Kanals für Lese- bzw. Schreibvorgänge.

    CREATE EXTERNAL STREAM MyTempSensors
    WITH (
         DATA_SOURCE = EdgeHubInput,
         FILE_FORMAT = InputFileFormat,
         LOCATION = N'TemperatureSensors',
         INPUT_OPTIONS = N'',
         OUTPUT_OPTIONS = N''
    );
    GO
    

Beispiel: Erstellen eines externen Datenstromobjekts zum Azure SQL-Datenbank

Im folgenden Beispiel wird ein externes Streamobjekt für die lokale Datenbank in Azure SQL Edge erstellt.

  1. Erstellen Sie einen Hauptschlüssel in der Datenbank. Dies ist erforderlich, um das Geheimnis für die Anmeldeinformationen zu verschlüsseln.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<<Strong_Password_For_Master_Key_Encryption>>';
    
  2. Erstellen Sie datenbankweit gültige Anmeldeinformationen für den Zugriff auf die SQL Server-Quelle. Das folgende Beispiel erstellt Anmeldeinformationen für die externe Datenquelle mit IDENTITY = username und SECRET = password.

    CREATE DATABASE SCOPED CREDENTIAL SQLCredential
    WITH IDENTITY = '<SQL_Login>', SECRET = '<SQL_Login_PASSWORD>';
    GO
    
  3. Erstellen Sie mit CREATE EXTERNAL DATA SOURCE eine externe Datenquelle. Im Beispiel unten geschieht Folgendes:

    • Wird eine externe Datenquelle mit dem Namen LocalSQLOutput erstellt.
    • werden externe Datenquellen (LOCATION = '<vendor>://<server>[:<port>]') identifiziert. Im Beispiel wird auf eine lokale Instanz von Azure SQL Edge verwiesen.
    • Werden die zuvor erstellten Anmeldeinformationen verwendet.
    CREATE EXTERNAL DATA SOURCE LocalSQLOutput
    WITH (
         LOCATION = 'sqlserver://tcp:.,1433',
         CREDENTIAL = SQLCredential
    );
    GO
    
  4. Erstellen Sie das externe Streamobjekt. Im folgenden Beispiel wird ein externes Streamobjekt erstellt, das auf eine Tabelle dbo.TemperatureMeasurements in der Datenbank MySQLDatabase verweist.

    CREATE EXTERNAL STREAM TemperatureMeasurements
    WITH
    (
        DATA_SOURCE = LocalSQLOutput,
        LOCATION = N'MySQLDatabase.dbo.TemperatureMeasurements',
        INPUT_OPTIONS = N'',
        OUTPUT_OPTIONS = N''
    );
    

Beispiel: Erstellen eines externen Datenstromobjekts für Kafka

Im folgenden Beispiel wird ein externes Streamobjekt für die lokale Datenbank in Azure SQL Edge erstellt. In diesem Beispiel wird davon ausgegangen, dass der Kafka-Server für den anonymen Zugriff konfiguriert ist.

  1. Erstellen Sie mit CREATE EXTERNAL DATA SOURCE eine externe Datenquelle. Im Beispiel unten geschieht Folgendes:

    CREATE EXTERNAL DATA SOURCE [KafkaInput]
    WITH (LOCATION = N'kafka://<kafka_bootstrap_server_name_ip>:<port_number>');
    GO
    
  2. Erstellen Sie ein externes Dateiformat für die Kafka-Eingabe. Im folgenden Beispiel wurde ein JSON-Dateiformat mit GZIP-Komprimierung erstellt:

    CREATE EXTERNAL FILE FORMAT JsonGzipped
    WITH (
         FORMAT_TYPE = JSON,
         DATA_COMPRESSION = 'org.apache.hadoop.io.compress.GzipCodec'
    );
    GO
    
  3. Erstellen Sie das externe Streamobjekt. Im folgenden Beispiel wird ein externes Streamobjekt erstellt, das auf das Kafka-Thema TemperatureMeasurement verweist:

    CREATE EXTERNAL STREAM TemperatureMeasurement
    WITH
    (
        DATA_SOURCE = KafkaInput,
        FILE_FORMAT = JsonGzipped,
        LOCATION = 'TemperatureMeasurement',
        INPUT_OPTIONS = 'PARTITIONS: 10'
    );
    GO
    

Erstellen des Streamingauftrags und der Streamingabfragen

Verwenden Sie die gespeicherte Systemprozedur sys.sp_create_streaming_job, um die Streamingabfragen zu definieren und den Streamingauftrag zu erstellen. Die gespeicherte Prozedur sp_create_streaming_job nimmt die folgenden Parameter an:

  • @job_name: Der Name des Streamingauftrags. Die Namen von Streamingaufträgen sind in der gesamten Instanz eindeutig.
  • @statement: Auf der Stream AnalyticsAbfragesprache basierende Streamingabfrageanweisungen.

Im folgenden Beispiel wird ein einfacher Streamingauftrag mit einer Streamingabfrage erstellt. Diese Abfrage liest die Eingaben aus dem IoT Edge Hub und schreibt in dbo.TemperatureMeasurements in der Datenbank.

EXEC sys.sp_create_streaming_job @name = N'StreamingJob1',
    @statement = N'Select * INTO TemperatureMeasurements from MyEdgeHubInput'

Im folgenden Beispiel wird ein komplexerer Streamingauftrag mit mehreren verschiedenen Abfragen erstellt. Diese Abfragen enthalten eine Abfrage, die die integrierte AnomalyDetection_ChangePoint-Funktion verwendet, um Anomalien in den Temperaturdaten zu identifizieren.

EXEC sys.sp_create_streaming_job @name = N'StreamingJob2',
    @statement = N'
        SELECT *
        INTO TemperatureMeasurements1
        FROM MyEdgeHubInput1

        SELECT *
        INTO TemperatureMeasurements2
        FROM MyEdgeHubInput2

        SELECT *
        INTO TemperatureMeasurements3
        FROM MyEdgeHubInput3

        SELECT timestamp AS [Time],
            [Temperature] AS [Temperature],
            GetRecordPropertyValue(AnomalyDetection_ChangePoint(Temperature, 80, 1200) OVER (LIMIT DURATION(minute, 20)), '' Score '') AS ChangePointScore,
            GetRecordPropertyValue(AnomalyDetection_ChangePoint(Temperature, 80, 1200) OVER (LIMIT DURATION(minute, 20)), '' IsAnomaly '') AS IsChangePointAnomaly
        INTO TemperatureAnomalies
        FROM MyEdgeHubInput2;
';
GO

Starten, Beenden, Löschen und Überwachen von Streamingaufträgen

Um einen Streamingauftrag in Azure SQL Edge zu starten, führen Sie die gespeicherte Prozedur sys.sp_start_streaming_job aus. Die gespeicherte Prozedur erfordert, dass der Streamingauftrag als Eingabe gestartet wird.

EXEC sys.sp_start_streaming_job @name = N'StreamingJob1';
GO

Führen Sie die gespeicherte Prozedur sys.sp_stop_streaming_job aus, um einen Streamingauftrag zu verhindern. Die gespeicherte Prozedur erfordert, dass der Streamingauftrag als Eingabe beendet wird.

EXEC sys.sp_stop_streaming_job @name = N'StreamingJob1';
GO

Um einen Streamingauftrag zu entfernen (oder zu löschen), führen Sie die gespeicherte Prozedur sys.sp_drop_streaming_job aus. Die gespeicherte Prozedur erfordert, dass der Streamingauftrag als Eingabe gelöscht wird.

EXEC sys.sp_drop_streaming_job @name = N'StreamingJob1';
GO

Führen Sie die gespeicherte Prozedur sys.sp_get_streaming_job aus, um den aktuellen Status eines Streamingauftrags abzurufen. Die gespeicherte Prozedur erfordert, dass der Streamingauftrag als Eingabe gelöscht wird. Sie gibt den Namen und den aktuellen Status des Streamingauftrags aus.

EXEC sys.sp_get_streaming_job @name = N'StreamingJob1'
WITH RESULT SETS (
        (
            name NVARCHAR(256),
            status NVARCHAR(256),
            error NVARCHAR(256)
        )
    );
GO

Der Streamingauftrag kann einen der folgenden Zustände aufweisen:

Status Beschreibung
Erstellt Der Streamingauftrag wurde erstellt, aber noch nicht gestartet.
Wird gestartet Der Streamingauftrag befindet sich in der Startphase.
Idle Der Streamingauftrag wird ausgeführt, es sind aber keine Eingaben für die Verarbeitung vorhanden.
In Verarbeitung Der Streamingauftrag wird ausgeführt und verarbeitet Eingaben. Dieser Zustand zeigt einen fehlerfreien Status für den Streamingauftrag an.
Heruntergestuft Der Streamingauftrag wird ausgeführt, aber bei der Eingabeverarbeitung sind einige nicht schwerwiegende Fehler aufgetreten. Der Eingabeauftrag wird weiterhin ausgeführt, legt jedoch Eingaben ab, die auf Fehler stoßen.
Beendet Der Streamingauftrag wurde beendet.
Fehlerhaft Der Streamingauftrag ist fehlgeschlagen. Dies ist im Allgemeinen ein Hinweis auf einen schwerwiegenden Fehler während der Verarbeitung.

Hinweis

Da der Streamingauftrag asynchron ausgeführt wird, treten bei dem Auftrag möglicherweise Fehler zur Laufzeit auf. Um einen Streamingauftragsfehler zu beheben, verwenden Sie die sys.sp_get_streaming_job gespeicherte Prozedur, oder überprüfen Sie das Docker-Protokoll aus dem Azure SQL Edge-Container, wodurch die Fehlerdetails aus dem Streamingauftrag bereitgestellt werden können.

Nächste Schritte