Bagikan melalui


Buat Pekerjaan Streaming di Azure SQL Edge

Penting

Azure SQL Edge tidak lagi mendukung platform ARM64.

Artikel ini menjelaskan cara membuat pekerjaan streaming T-SQL di Azure SQL Edge. Anda membuat input aliran eksternal dan objek output, lalu Anda menentukan kueri pekerjaan streaming sebagai bagian dari pembuatan pekerjaan streaming.

Mengonfigurasi objek input dan output aliran eksternal

Streaming T-SQL menggunakan fungsionalitas sumber data eksternal SQL Server untuk menentukan sumber data yang terkait dengan input aliran eksternal dan output pekerjaan streaming. Gunakan perintah T-SQL berikut untuk membuat input aliran eksternal atau objek output:

Selain itu, jika Azure SQL Edge, SQL Server, atau Azure SQL Database digunakan sebagai aliran output, Anda memerlukan CREATE DATABASE SCOPED CREDENTIAL (Transact-SQL). Perintah T-SQL ini menentukan kredensial untuk mengakses database.

Sumber data aliran input dan output yang didukung

Azure SQL Edge saat ini hanya mendukung sumber data berikut sebagai input dan output stream.

Tipe sumber data Input Hasil Deskripsi
Azure IoT Edge Y Y Sumber data untuk membaca dan menulis data streaming ke hub Azure IoT Edge. Untuk informasi selengkapnya, lihat IoT Edge Hub.
Microsoft Azure SQL Database N Y Koneksi sumber data untuk menulis data streaming ke SQL Database. Database dapat menjadi database lokal di Azure SQL Edge, atau database jarak jauh di SQL Server atau Azure SQL Database.
Kafka Y N Sumber data untuk membaca data streaming dari topik Kafka.

Contoh: Membuat objek input/output aliran eksternal untuk hub Azure IoT Edge

Contoh berikut membuat objek stream eksternal untuk hub Azure IoT Edge. Untuk membuat sumber data aliran input/output eksternal untuk hub Azure IoT Edge, Anda harus terlebih dahulu membuat format file eksternal untuk tata letak data yang dibaca atau ditulis juga.

  1. Membuat format file eksternal dari tipe JSON.

    CREATE EXTERNAL FILE format InputFileFormat
    WITH (FORMAT_TYPE = JSON);
    GO
    
  2. Buat sumber data eksternal untuk hub Azure IoT Edge. Skrip T-SQL berikut ini membuat koneksi sumber data ke hub IoT Edge yang berjalan pada host Docker yang sama dengan Azure SQL Edge.

    CREATE EXTERNAL DATA SOURCE EdgeHubInput
    WITH (LOCATION = 'edgehub://');
    GO
    
  3. Buat objek stream eksternal untuk hub Azure IoT Edge. Skrip T-SQL berikut membuat objek stream untuk hub IoT Edge. Dalam kasus objek aliran hub IoT Edge, parameter LOCATION adalah nama topik hub IoT Edge atau saluran yang dibaca atau ditulis.

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

Contoh: Membuat objek stream eksternal ke Azure SQL Database

Contoh berikut membuat objek stream eksternal ke database lokal di Azure SQL Edge.

  1. Membuat kunci master pada database. Kunci master diperlukan untuk mengenkripsi rahasia kredensial.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<<Strong_Password_For_Master_Key_Encryption>>';
    
  2. Buat kredensial lingkup database untuk mengakses sumber SQL Server. Contoh berikut membuat kredensial ke sumber data eksternal, dengan IDENTITY = nama pengguna, dan SECRET = password.

    CREATE DATABASE SCOPED CREDENTIAL SQLCredential
    WITH IDENTITY = '<SQL_Login>', SECRET = '<SQL_Login_PASSWORD>';
    GO
    
  3. Buat sumber data eksternal dengan CREATE EXTERNAL DATA SOURCE. Lihat contoh berikut:

    • Membuat sumber data eksternal bernama LocalSQLOutput.
    • Mengidentifikasi sumber data eksternal (LOCATION = '<vendor>://<server>[:<port>]'). Dalam contoh, ini menunjuk ke instans dari Azure SQL Edge lokal.
    • Menggunakan kredensial yang dibuat sebelumnya.
    CREATE EXTERNAL DATA SOURCE LocalSQLOutput
    WITH (
         LOCATION = 'sqlserver://tcp:.,1433',
         CREDENTIAL = SQLCredential
    );
    GO
    
  4. Membuat objek stream eksternal. Contoh berikut membuat objek stream eksternal yang menunjuk ke tabel dbo.TemperatureMeasurements, dalam database MySQLDatabase.

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

Contoh: Membuat objek stream eksternal untuk Kafka

Contoh berikut membuat objek stream eksternal ke database lokal di Azure SQL Edge. Contoh ini mengasumsikan bahwa server kafka dikonfigurasi untuk akses anonim.

  1. Buat sumber data eksternal dengan CREATE EXTERNAL DATA SOURCE. Lihat contoh berikut:

    CREATE EXTERNAL DATA SOURCE [KafkaInput]
    WITH (LOCATION = N'kafka://<kafka_bootstrap_server_name_ip>:<port_number>');
    GO
    
  2. Buat format file eksternal untuk input Kafka. Contoh berikut membuat format file JSON dengan GZipped Compression.

    CREATE EXTERNAL FILE FORMAT JsonGzipped
    WITH (
         FORMAT_TYPE = JSON,
         DATA_COMPRESSION = 'org.apache.hadoop.io.compress.GzipCodec'
    );
    GO
    
  3. Membuat objek stream eksternal. Contoh berikut membuat objek stream eksternal yang menunjuk ke topik Kafka TemperatureMeasurement.

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

Membuat pekerjaan streaming dan kueri streaming

Gunakan prosedur sys.sp_create_streaming_job yang disimpan sistem untuk menentukan kueri streaming dan membuat pekerjaan streaming. Prosedur sp_create_streaming_job yang disimpan mengambil parameter berikut:

Contoh berikut membuat pekerjaan streaming sederhana dengan satu kueri streaming. Kueri ini membaca input dari hub IoT Edge, dan menulis dbo.TemperatureMeasurements ke dalam database.

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

Contoh berikut membuat pekerjaan streaming yang lebih rumit dengan beberapa kueri yang berbeda. Kueri ini mencakup salah satu yang menggunakan fungsi AnomalyDetection_ChangePoint bawaan untuk mengidentifikasi anomali dalam data suhu.

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

Mulai, hentikan, jatuhkan, dan pantau pekerjaan streaming

Untuk memulai pekerjaan streaming di Azure SQL Edge, jalankan prosedur sys.sp_start_streaming_job yang tersimpan. Prosedur yang disimpan memerlukan nama pekerjaan streaming untuk dimulai, sebagai input.

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

Untuk menghentikan pekerjaan streaming, jalankan prosedur sys.sp_stop_streaming_job yang tersimpan. Prosedur yang disimpan memerlukan nama pekerjaan streaming untuk dihentikan, sebagai input.

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

Untuk menjatuhkan (atau menghapus) pekerjaan streaming, jalankan prosedur sys.sp_drop_streaming_job yang disimpan. Prosedur yang disimpan memerlukan nama dari pekerjaan streaming untuk dijatuhkan, sebagai input.

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

Untuk mendapatkan status pekerjaan streaming saat ini, jalankan prosedur sys.sp_get_streaming_job yang disimpan. Prosedur yang disimpan memerlukan nama dari pekerjaan streaming untuk dijatuhkan, sebagai input. Prosedur menghasilkan nama dan status pekerjaan streaming saat ini.

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

Pekerjaan streaming dapat memiliki salah satu status berikut:

Keadaan Deskripsi
Dibuat Pekerjaan streaming telah dibuat, tetapi belum dimulai.
Memulai Pekerjaan streaming sedang dalam fase memulai.
Diam Pekerjaan streaming berjalan, tetapi tidak ada masukan untuk diproses.
Sedang diproses Pekerjaan streaming sedang berjalan, dan sedang memproses input. Keadaan ini menunjukkan keadaan sehat untuk pekerjaan streaming.
Diturunkan Pekerjaan streaming berjalan, tetapi ada beberapa kesalahan non-fatal selama pemrosesan input. Pekerjaan input terus berjalan, tetapi akan menghilangkan input yang mengalami kesalahan.
Dihentikan Pekerjaan streaming telah dihentikan.
Gagal Pekerjaan streaming Gagal. Pada umumnya merupakan indikasi kesalahan fatal selama pemrosesan.

Catatan

Karena pekerjaan streaming dijalankan secara asinkron, pekerjaan mungkin mengalami kesalahan saat runtime. Untuk memecahkan masalah kegagalan pekerjaan streaming, gunakan sys.sp_get_streaming_job prosedur tersimpan, atau tinjau log Docker dari kontainer Azure SQL Edge, yang dapat memberikan detail kesalahan dari pekerjaan streaming.

Langkah berikutnya