Dela via


Skapa ett dataströmningsjobb i Azure SQL Edge

Viktigt!

Azure SQL Edge dras tillbaka den 30 september 2025. Mer information och migreringsalternativ finns i meddelandet Om pensionering.

Kommentar

Azure SQL Edge stöder inte längre ARM64-plattformen.

Den här artikeln beskriver hur du skapar ett T-SQL-direktuppspelningsjobb i Azure SQL Edge. Du skapar indata- och utdataobjekt för extern ström och definierar sedan frågan för direktuppspelningsjobbet som en del av skapandet av strömningsjobbet.

Konfigurera indata- och utdataobjekt för extern ström

T-SQL-direktuppspelning använder funktionen för extern datakälla i SQL Server för att definiera de datakällor som är associerade med externa indata och utdata från strömningsjobbet. Använd följande T-SQL-kommandon för att skapa ett externt flödesindata- eller utdataobjekt:

Om Azure SQL Edge, SQL Server eller Azure SQL Database används som utdataström behöver du dessutom CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). Det här T-SQL-kommandot definierar autentiseringsuppgifterna för att komma åt databasen.

Datakällor för indata och utdataströmmar som stöds

Azure SQL Edge stöder för närvarande endast följande datakällor som indata och utdata för dataströmmar.

Typ av datakälla Indata Utdata beskrivning
Azure IoT Edge-hubb Y Y Datakälla för att läsa och skriva strömmande data till en Azure IoT Edge-hubb. Mer information finns i IoT Edge Hub.
SQL Database N Y Datakällans anslutning för att skriva strömmande data till SQL Database. Databasen kan vara en lokal databas i Azure SQL Edge eller en fjärrdatabas i SQL Server eller Azure SQL Database.
Kafka Y N Datakälla för att läsa strömmande data från ett Kafka-ämne.

Exempel: Skapa ett externt indata-/utdataobjekt för Azure IoT Edge-hubben

I följande exempel skapas ett externt dataströmsobjekt för Azure IoT Edge-hubben. Om du vill skapa en extern datakälla för in-/utdataströmmen för Azure IoT Edge-hubben måste du först skapa ett externt filformat för layouten för de data som läses eller skrivs också.

  1. Skapa ett externt filformat av typen JSON.

    CREATE EXTERNAL FILE format InputFileFormat
    WITH (FORMAT_TYPE = JSON);
    GO
    
  2. Skapa en extern datakälla för Azure IoT Edge-hubben. Följande T-SQL-skript skapar en datakällaanslutning till en IoT Edge-hubb som körs på samma Docker-värd som Azure SQL Edge.

    CREATE EXTERNAL DATA SOURCE EdgeHubInput
    WITH (LOCATION = 'edgehub://');
    GO
    
  3. Skapa det externa dataströmobjektet för Azure IoT Edge-hubben. Följande T-SQL-skript skapar ett dataströmobjekt för IoT Edge-hubben. Om ett IoT Edge-hubbströmobjekt är LOCATION-parametern namnet på det IoT Edge-hubbämne eller -kanal som läses eller skrivs till.

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

Exempel: Skapa ett externt dataströmsobjekt till Azure SQL Database

I följande exempel skapas ett externt dataströmsobjekt till den lokala databasen i Azure SQL Edge.

  1. Skapa en huvudnyckel i databasen. Detta krävs för att kryptera hemligheten för autentiseringsuppgifter.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<<Strong_Password_For_Master_Key_Encryption>>';
    
  2. Skapa en databasomfattande autentiseringsuppgift för åtkomst till SQL Server-källan. I följande exempel skapas en autentiseringsuppgift för den externa datakällan, med IDENTITY = username och SECRET = password.

    CREATE DATABASE SCOPED CREDENTIAL SQLCredential
    WITH IDENTITY = '<SQL_Login>', SECRET = '<SQL_Login_PASSWORD>';
    GO
    
  3. Skapa en extern datakälla med SKAPA EXTERN DATAKÄLLA. Följande exempel:

    • Skapar en extern datakälla med namnet LocalSQLOutput.
    • Identifierar den externa datakällan (LOCATION = '<vendor>://<server>[:<port>]'). I exemplet pekar den på en lokal instans av Azure SQL Edge.
    • Använder autentiseringsuppgifterna som skapades tidigare.
    CREATE EXTERNAL DATA SOURCE LocalSQLOutput
    WITH (
         LOCATION = 'sqlserver://tcp:.,1433',
         CREDENTIAL = SQLCredential
    );
    GO
    
  4. Skapa det externa dataströmsobjektet. I följande exempel skapas ett externt strömobjekt som pekar på en tabell-dbo . TemperatureMeasurements i databasen MySQLDatabase.

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

Exempel: Skapa ett externt strömobjekt för Kafka

I följande exempel skapas ett externt dataströmsobjekt till den lokala databasen i Azure SQL Edge. Det här exemplet förutsätter att kafka-servern har konfigurerats för anonym åtkomst.

  1. Skapa en extern datakälla med SKAPA EXTERN DATAKÄLLA. Följande exempel:

    CREATE EXTERNAL DATA SOURCE [KafkaInput]
    WITH (LOCATION = N'kafka://<kafka_bootstrap_server_name_ip>:<port_number>');
    GO
    
  2. Skapa ett externt filformat för Kafka-indata. I följande exempel skapades ett JSON-filformat med GZipped Compression.

    CREATE EXTERNAL FILE FORMAT JsonGzipped
    WITH (
         FORMAT_TYPE = JSON,
         DATA_COMPRESSION = 'org.apache.hadoop.io.compress.GzipCodec'
    );
    GO
    
  3. Skapa det externa dataströmsobjektet. I följande exempel skapas ett externt strömobjekt som pekar på Kafka-ämnet TemperatureMeasurement.

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

Skapa strömningsjobbet och strömningsfrågorna

Använd den sys.sp_create_streaming_job system lagrade proceduren för att definiera strömmande frågor och skapa strömningsjobbet. Den sp_create_streaming_job lagrade proceduren tar följande parametrar:

I följande exempel skapas ett enkelt direktuppspelningsjobb med en direktuppspelningsfråga. Den här frågan läser indata från IoT Edge-hubben och skriver till dbo.TemperatureMeasurements i databasen.

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

I följande exempel skapas ett mer komplext strömningsjobb med flera olika frågor. Dessa frågor omfattar en som använder den inbyggda AnomalyDetection_ChangePoint funktionen för att identifiera avvikelser i temperaturdata.

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

Starta, stoppa, släppa och övervaka direktuppspelningsjobb

Starta ett direktuppspelningsjobb i Azure SQL Edge genom att köra den sys.sp_start_streaming_job lagrade proceduren. Den lagrade proceduren kräver att namnet på direktuppspelningsjobbet startas som indata.

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

Om du vill stoppa ett direktuppspelningsjobb kör du den sys.sp_stop_streaming_job lagrade proceduren. Den lagrade proceduren kräver att namnet på direktuppspelningsjobbet stoppas som indata.

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

Om du vill släppa (eller ta bort) ett direktuppspelningsjobb kör du den sys.sp_drop_streaming_job lagrade proceduren. Den lagrade proceduren kräver att namnet på strömningsjobbet släpps som indata.

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

Kör den sys.sp_get_streaming_job lagrade proceduren för att hämta aktuell status för ett direktuppspelningsjobb. Den lagrade proceduren kräver att namnet på strömningsjobbet släpps som indata. Det matar ut namnet och den aktuella statusen för strömningsjobbet.

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

Strömningsjobbet kan ha någon av följande statusar:

Status Beskrivning
Skapad Strömningsjobbet skapades, men har ännu inte startats.
Startar Strömningsjobbet är i startfasen.
Inaktiv Strömningsjobbet körs, men det finns inga indata att bearbeta.
Bearbetning Direktuppspelningsjobbet körs och bearbetar indata. Det här tillståndet anger ett felfritt tillstånd för strömningsjobbet.
Degraderad Strömningsjobbet körs, men det uppstod några icke-dödliga fel under bearbetningen av indata. Indatajobbet fortsätter att köras, men släpper indata som påträffar fel.
Stoppat Direktuppspelningsjobbet har stoppats.
Misslyckad Strömningsjobbet misslyckades. Detta är vanligtvis en indikation på ett allvarligt fel under bearbetningen.

Kommentar

Eftersom strömningsjobbet körs asynkront kan jobbet stöta på fel vid körning. Om du vill felsöka ett fel i ett direktuppspelningsjobb använder du den sys.sp_get_streaming_job lagrade proceduren eller granskar Docker-loggen från Azure SQL Edge-containern, som kan ange felinformationen från strömningsjobbet.