Memproses peristiwa dengan menggunakan operator SQL

Operator SQL, juga disebut editor kode SQL, adalah kemampuan transformasi data baru dalam eventstream Microsoft Fabric. Operator SQL memberikan pengalaman pengeditan kode di mana Anda dapat dengan mudah menentukan logika transformasi data kustom Anda sendiri dengan menggunakan ekspresi SQL sederhana. Artikel ini menjelaskan cara menggunakan operator SQL untuk transformasi data dalam eventstream.

Note

Nama artefak eventstream yang menyertakan garis bawah (_) atau titik (.) tidak kompatibel dengan operator SQL. Untuk pengalaman terbaik, buat eventstream baru tanpa menggunakan garis bawah atau titik dalam nama artefak.

Prerequisites

  • Akses ke ruang kerja dalam mode lisensi kapasitas Fabric atau mode lisensi uji coba dengan hak akses Kontributor atau lebih tinggi.

Menambahkan operator SQL ke eventstream

Untuk melakukan operasi pemrosesan aliran pada aliran data Anda dengan menggunakan operator SQL, tambahkan operator SQL ke eventstream Anda dengan menggunakan instruksi berikut:

  1. Buat eventstream baru. Kemudian tambahkan operator SQL ke dalamnya dengan menggunakan salah satu opsi berikut:

    • Pada pita, pilih Transformasi peristiwa, lalu pilih SQL.

      Cuplikan layar yang memperlihatkan pemilihan operator SQL pada menu untuk mengubah peristiwa.

    • Pada kanvas, pilih Ubah peristiwa atau tambahkan tujuan, lalu pilih Kode SQL.

      Cuplikan layar yang memperlihatkan pemilihan operator SQL dalam daftar untuk mengubah peristiwa di kanvas.

  2. Simpul SQL baru ditambahkan ke eventstream Anda. Pilih ikon pensil untuk terus menyiapkan operator SQL.

    Cuplikan layar yang memperlihatkan pemilihan ikon pensil pada simpul operator SQL.

  3. Pada panel Kode SQL , tentukan nama unik untuk simpul operator SQL di eventstream.

  4. Edit kueri di area kueri, atau pilih Edit kueri untuk memasukkan tampilan editor kode layar penuh.

    Cuplikan layar yang memperlihatkan kotak untuk memasukkan nama operasi dan tombol untuk mengedit kueri di panel Kode SQL.

  5. Mode editor kode layar penuh menampilkan panel penjelajah input/output di sisi kiri. Bagian editor kode dapat disesuaikan, sehingga Anda dapat mengubah ukurannya sesuai dengan preferensi Anda. Bagian pratinjau di bagian bawah memungkinkan Anda menampilkan data input dan hasil pengujian kueri Anda.

    Cuplikan layar yang memperlihatkan editor lengkap SQL.

  6. Pilih teks di bagian Output , lalu masukkan nama untuk simpul tujuan. Operator SQL mendukung semua tujuan Real-Time Intelligence, termasuk eventhouse, lakehouse, activator, atau stream.

    Cuplikan layar yang memperlihatkan area Output dengan tombol Plus ditekan.

  7. Tentukan alias atau nama untuk tujuan output tempat data yang diproses melalui operator SQL ditulis.

    Cuplikan layar yang memperlihatkan nama untuk output.

  8. Tambahkan kueri SQL untuk transformasi data yang diperlukan.

    Eventstream dibangun di atas Azure Stream Analytics, dan mendukung semantik kueri yang sama dari bahasa kueri Azure Stream Analytics. Untuk mempelajari selengkapnya tentang sintaks dan penggunaan, lihat Azure Stream Analytics dan Referensi Bahasa Kueri Eventstream.

    Berikut adalah struktur kueri dasar:

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

    Contoh kueri ini menunjukkan deteksi suhu tinggi di ruangan setiap menit:

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

    Contoh kueri ini memperlihatkan CASE pernyataan untuk mengategorikan suhu:

    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. Pada pita, gunakan perintah Uji kueri untuk memvalidasi logika transformasi. Hasil kueri pengujian muncul pada tab Hasil pengujian .

    Cuplikan layar yang menunjukkan hasil pengujian.

  10. Saat Anda selesai menguji, pilih Simpan pada pita untuk kembali ke kanvas eventstream.

    Cuplikan layar yang memperlihatkan pita untuk kueri, termasuk perintah untuk menguji kueri dan menyimpan.

  11. Pada panel Kode SQL , jika tombol Simpan diaktifkan, pilih untuk menyimpan pengaturan.

    Cuplikan layar yang memperlihatkan panel Kode SQL dan tombol Simpan.

  12. Konfigurasikan tujuan.

    Cuplikan layar yang memperlihatkan eventstream yang telah selesai.

Contoh lainnya

Contoh berikut menunjukkan skenario analitik real-time umum yang dapat Anda terapkan dengan operator SQL.

Agregasi penjualan kota per menit - Gunakan TumblingWindow untuk menghitung total penjualan tetap dan tidak tumpang tindih satu menit yang dikelompokkan menurut kota:

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

Deteksi ledakan dan bot - Gunakan HoppingWindow untuk mendeteksi pengguna yang melakukan jumlah pesanan yang luar biasa tinggi dalam jendela bergulir lima menit, dievaluasi setiap menit:

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

Penandaan anomali terhadap garis besar bergulir - Gunakan HoppingWindow untuk menghitung rata-rata bergulir dan menandai perangkat yang nilai metrik maksimumnya melebihi dua kali rata-rata dalam jendela, yang menunjukkan potensi anomali:

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)

Menulis ke beberapa tujuan dari satu operator SQL

Dengan operator SQL, Anda dapat mengirim data ke beberapa sink output atau tujuan dengan menambahkan beberapa INTO klausa dalam kueri SQL Anda dan dengan menentukan beberapa output.

Menentukan beberapa output di editor kueri

  1. Pilih Edit (ikon Pensil) pada simpul operator SQL untuk membuka panel Kode SQL .

  2. Di panel Kode SQL , pilih Edit kueri untuk membuka editor kode layar penuh.

    Cuplikan layar yang memperlihatkan panel Kode SQL.

  3. Di editor kode layar penuh, pilih + di bagian Output untuk menambahkan output baru. Pilih jenis output pilihan Anda. Ini membuat alias untuk output yang bisa Anda gunakan dalam kueri. Pilih nama output yang dibuat dan masukkan nama pilihan Anda.

    Cuplikan layar yang memperlihatkan tombol untuk menambahkan output di editor penuh SQL.

Gunakan beberapa pernyataan SELECT ... INTO

Setiap SELECT pernyataan dapat menulis ke output yang berbeda. Tambahkan kueri untuk menulis output ke beberapa tujuan.

Dalam contoh kueri berikut, pernyataan pertama SELECT menulis ke output bernama RawArchive (jenis: Lakehouse), dan pernyataan kedua SELECT menulis ke output bernama AggregationResults (jenis: 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

Menggunakan kembali logika perantara (praktik terbaik)

Jika Anda ingin menghindari duplikasi logika, gunakan klausa WITH dan sebarkan ke beberapa output dari sana. Dalam contoh berikut, InputStream ekspresi tabel umum (CTE) didefinisikan untuk membaca dari aliran input sekali, lalu kedua SELECT pernyataan mereferensikan InputStream CTE untuk menulis ke output yang berbeda. Pendekatan ini lebih efisien karena menghindari pembacaan dari aliran input beberapa kali.

  1. Masukkan kueri berikut di editor kode SQL untuk membaca dari aliran input sekali dan menulis ke beberapa output.

    
    --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. Pilih Uji kueri untuk memvalidasi hasil kueri. Setiap output yang ditentukan dalam kueri memiliki tab terpisah di panel Hasil pengujian .

    Cuplikan layar yang memperlihatkan contoh menambahkan beberapa kueri tujuan di editor lengkap SQL.

  3. Pilih Simpan untuk menyimpan kueri dan keluar dari editor.

    Cuplikan layar yang memperlihatkan tombol Simpan di editor lengkap SQL.

  4. Pilih Simpan lagi di panel Editor SQL.

  5. Pilih setiap simpul tujuan yang dibuat dari operator SQL, lalu konfigurasikan pengaturan tujuan untuk masing-masing simpul tersebut.

    Cuplikan layar yang memperlihatkan tautan konfigurasi untuk setiap simpul tujuan.

  6. Setelah Anda menyelesaikan konfigurasi, eventstream Anda akan terlihat seperti contoh berikut, di mana simpul operator SQL memiliki dua tujuan output.

    Cuplikan layar yang memperlihatkan contoh operator SQL dengan beberapa output.

Mengonfigurasi kebijakan pemesanan peristiwa di operator SQL

Dengan operator SQL, Anda dapat memproses data menggunakan waktu peristiwa atau aplikasi. Secara default, Eventstream menggunakan waktu kedatangan. Untuk memproses berdasarkan waktu peristiwa, Anda harus secara eksplisit mengonfigurasinya menggunakan TIMESTAMP BY dalam kueri Anda.

Input contoh

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

Kueri sampel menggunakan waktu peristiwa


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

Anda juga dapat menambahkan ambang batas untuk peristiwa dengan kedatangan terlambat dan peristiwa yang tidak berurutan di bawah pengaturan lanjutan operator SQL.

Cuplikan layar yang memperlihatkan pengaturan tingkat lanjut operator SQL.

Limitations

  • Operator SQL dirancang untuk memusatkan semua logika transformasi Anda. Akibatnya, Anda tidak dapat menggunakannya bersama operator bawaan lainnya dalam jalur pemrosesan yang sama. Menautkan beberapa operator SQL dalam satu jalur juga tidak didukung.

  • Jika Anda menambahkan operator SQL ke topologi, Anda harus membuat simpul tujuan baru. Node tujuan yang sudah ada tidak dapat digunakan ulang dengan operator SQL.