Delen via


Een gegevensstreamingtaak maken in Azure SQL Edge

Belangrijk

Azure SQL Edge wordt op 30 september 2025 buiten gebruik gesteld. Zie de kennisgeving buitengebruikstelling voor meer informatie en migratieopties.

Notitie

Azure SQL Edge biedt geen ondersteuning meer voor het ARM64-platform.

In dit artikel wordt uitgelegd hoe u een T-SQL-streamingtaak maakt in Azure SQL Edge. U maakt de invoer- en uitvoerobjecten van de externe stroom en definieert vervolgens de query voor de streamingtaak als onderdeel van het maken van de streamingtaak.

De invoer- en uitvoerobjecten van de externe stroom configureren

T-SQL-streaming maakt gebruik van de functionaliteit van de externe gegevensbron van SQL Server om de gegevensbronnen te definiëren die zijn gekoppeld aan de invoer en uitvoer van de externe stroom van de streamingtaak. Gebruik de volgende T-SQL-opdrachten om een externe stroominvoer- of uitvoerobject te maken:

Als Azure SQL Edge, SQL Server of Azure SQL Database als uitvoerstroom wordt gebruikt, hebt u bovendien de CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL) nodig. Deze T-SQL-opdracht definieert de referenties voor toegang tot de database.

Ondersteunde gegevensbronnen voor invoer- en uitvoerstromen

Azure SQL Edge ondersteunt momenteel alleen de volgende gegevensbronnen als stroominvoer en -uitvoer.

Gegevensbrontype Invoer Uitvoer Beschrijving
Azure IoT Edge-hub J J Gegevensbron voor het lezen en schrijven van streaminggegevens naar een Azure IoT Edge-hub. Zie IoT Edge Hub voor meer informatie.
SQL Database N J Gegevensbronverbinding voor het schrijven van streaminggegevens naar SQL Database. De database kan een lokale database zijn in Azure SQL Edge of een externe database in SQL Server of Azure SQL Database.
Kafka J N Gegevensbron voor het lezen van streaminggegevens uit een Kafka-onderwerp.

Voorbeeld: Een extern stroominvoer-/uitvoerobject maken voor Azure IoT Edge-hub

In het volgende voorbeeld wordt een extern streamobject voor Azure IoT Edge-hub gemaakt. Als u een gegevensbron voor invoer/uitvoer van een externe stroom wilt maken voor Azure IoT Edge-hub, moet u eerst een externe bestandsindeling maken voor de indeling van de gegevens die worden gelezen of geschreven.

  1. Maak een externe bestandsindeling van het type JSON.

    CREATE EXTERNAL FILE format InputFileFormat
    WITH (FORMAT_TYPE = JSON);
    GO
    
  2. Maak een externe gegevensbron voor Azure IoT Edge-hub. Met het volgende T-SQL-script maakt u een gegevensbronverbinding met een IoT Edge-hub die wordt uitgevoerd op dezelfde Docker-host als Azure SQL Edge.

    CREATE EXTERNAL DATA SOURCE EdgeHubInput
    WITH (LOCATION = 'edgehub://');
    GO
    
  3. Maak het externe streamobject voor Azure IoT Edge-hub. Met het volgende T-SQL-script maakt u een streamobject voor de IoT Edge-hub. In het geval van een IoT Edge-hubstreamobject is de PARAMETER LOCATION de naam van het Onderwerp of kanaal van de IoT Edge-hub waarnaar wordt gelezen of geschreven.

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

Voorbeeld: Een extern streamobject maken naar Azure SQL Database

In het volgende voorbeeld wordt een extern streamobject gemaakt naar de lokale database in Azure SQL Edge.

  1. Maak een hoofdsleutel in de database. Dit is vereist om het referentiegeheim te versleutelen.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<<Strong_Password_For_Master_Key_Encryption>>';
    
  2. Maak een databasereferentie voor toegang tot de SQL Server-bron. In het volgende voorbeeld wordt een referentie gemaakt voor de externe gegevensbron, met IDENTITY = username en SECRET = password.

    CREATE DATABASE SCOPED CREDENTIAL SQLCredential
    WITH IDENTITY = '<SQL_Login>', SECRET = '<SQL_Login_PASSWORD>';
    GO
    
  3. Maak een externe gegevensbron met CREATE EXTERNAL DATA SOURCE. Het volgende voorbeeld:

    • Hiermee maakt u een externe gegevensbron met de naam LocalSQLOutput.
    • Identificeert de externe gegevensbron (LOCATION = '<vendor>://<server>[:<port>]'). In het voorbeeld verwijst deze naar een lokaal exemplaar van Azure SQL Edge.
    • Gebruikt de referentie die u eerder hebt gemaakt.
    CREATE EXTERNAL DATA SOURCE LocalSQLOutput
    WITH (
         LOCATION = 'sqlserver://tcp:.,1433',
         CREDENTIAL = SQLCredential
    );
    GO
    
  4. Maak het externe streamobject. In het volgende voorbeeld wordt een extern streamobject gemaakt dat verwijst naar een tabel-dbo . TemperatureMeasurements, in de database MySQLDatabase.

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

Voorbeeld: Een extern streamobject maken voor Kafka

In het volgende voorbeeld wordt een extern streamobject gemaakt naar de lokale database in Azure SQL Edge. In dit voorbeeld wordt ervan uitgegaan dat de kafka-server is geconfigureerd voor anonieme toegang.

  1. Maak een externe gegevensbron met CREATE EXTERNAL DATA SOURCE. Het volgende voorbeeld:

    CREATE EXTERNAL DATA SOURCE [KafkaInput]
    WITH (LOCATION = N'kafka://<kafka_bootstrap_server_name_ip>:<port_number>');
    GO
    
  2. Maak een externe bestandsindeling voor de Kafka-invoer. In het volgende voorbeeld is een JSON-bestandsindeling gemaakt met GZipped Compression.

    CREATE EXTERNAL FILE FORMAT JsonGzipped
    WITH (
         FORMAT_TYPE = JSON,
         DATA_COMPRESSION = 'org.apache.hadoop.io.compress.GzipCodec'
    );
    GO
    
  3. Maak het externe streamobject. In het volgende voorbeeld wordt een extern streamobject gemaakt dat verwijst naar het Kafka-onderwerp TemperatureMeasurement.

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

De streamingtaak en de streamingquery's maken

Gebruik de door het sys.sp_create_streaming_job systeem opgeslagen procedure om de streamingquery's te definiëren en de streamingtaak te maken. De sp_create_streaming_job opgeslagen procedure heeft de volgende parameters:

In het volgende voorbeeld wordt een eenvoudige streamingtaak gemaakt met één streamingquery. Deze query leest de invoer van de IoT Edge-hub en schrijft naar dbo.TemperatureMeasurements in de database.

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

In het volgende voorbeeld wordt een complexere streamingtaak gemaakt met meerdere verschillende query's. Deze query's bevatten een query die gebruikmaakt van de ingebouwde AnomalyDetection_ChangePoint functie om afwijkingen in de temperatuurgegevens te identificeren.

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

Streamingtaken starten, stoppen, neerzetten en bewaken

Voer de sys.sp_start_streaming_job opgeslagen procedure uit om een streamingtaak te starten in Azure SQL Edge. Voor de opgeslagen procedure moet de naam van de streamingtaak als invoer worden gestart.

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

Voer de sys.sp_stop_streaming_job opgeslagen procedure uit om een streamingtaak te stoppen. Voor de opgeslagen procedure moet de naam van de streamingtaak als invoer worden gestopt.

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

Als u een streamingtaak wilt verwijderen (of verwijderen), voert u de sys.sp_drop_streaming_job opgeslagen procedure uit. Voor de opgeslagen procedure moet de naam van de streamingtaak als invoer worden verwijderd.

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

Voer sys.sp_get_streaming_job de opgeslagen procedure uit om de huidige status van een streamingtaak op te halen. Voor de opgeslagen procedure moet de naam van de streamingtaak als invoer worden verwijderd. De naam en de huidige status van de streamingtaak worden uitgevoerd.

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

De streamingtaak kan een van de volgende statussen hebben:

-Status Beschrijving
Gemaakt De streamingtaak is gemaakt, maar is nog niet gestart.
Starten De streamingtaak bevindt zich in de beginfase.
Niet-actief De streamingtaak wordt uitgevoerd, maar er is geen invoer om te verwerken.
Verwerken De streamingtaak wordt uitgevoerd en verwerkt invoer. Deze status geeft een status in orde aan voor de streamingtaak.
Verminderd beschikbaar De streamingtaak wordt uitgevoerd, maar er zijn enkele niet-fatale fouten tijdens de invoerverwerking. De invoertaak wordt nog steeds uitgevoerd, maar er worden invoer verwijderd die fouten ondervinden.
Gestopt De streamingtaak is gestopt.
Mislukt De streamingtaak is mislukt. Dit is over het algemeen een indicatie van een fatale fout tijdens de verwerking.

Notitie

Omdat de streamingtaak asynchroon wordt uitgevoerd, kan de taak tijdens runtime fouten tegenkomen. Als u problemen met een streamingtaak wilt oplossen, gebruikt u de sys.sp_get_streaming_job opgeslagen procedure of controleert u het Docker-logboek vanuit de Azure SQL Edge-container, die de foutdetails van de streamingtaak kan verstrekken.