SQL işleci kullanarak olayları işleme

SQL kod düzenleyicisi olarak da adlandırılan SQL işleci, Microsoft Fabric olay akışlarında yeni bir veri dönüştürme özelliğidir. SQL işleçleri, basit SQL ifadelerini kullanarak kendi özel veri dönüştürme mantığınızı kolayca tanımlayabileceğiniz bir kod düzenleme deneyimi sağlar. Bu makalede, bir olay akışındaki veri dönüştürmeleri için SQL işlecinin nasıl kullanılacağı açıklanmaktadır.

Note

Alt çizgi (_) veya nokta (.) içeren olay akışı yapıt adları SQL işleçleriyle uyumlu değildir. En iyi deneyim için yapıt adında alt çizgi veya nokta kullanmadan yeni bir olay akışı oluşturun.

Prerequisites

  • Fabric kapasite lisans modu veya Katkıda Bulunan veya daha yüksek izinlere sahip deneme lisansı modu altında bir çalışma alanına erişim.

Olay akışına SQL işleci ekleme

Sql işleci kullanarak veri akışlarınızda akış işleme işlemleri gerçekleştirmek için aşağıdaki yönergeleri kullanarak olay akışınıza bir SQL işleci ekleyin:

  1. Yeni bir olay akışı oluşturun. Ardından aşağıdaki seçeneklerden birini kullanarak buna bir SQL işleci ekleyin:

    • Şeritte Olayları dönüştür'ü ve ardından SQL'i seçin.

      Olayları dönüştürme menüsündeki SQL işleci seçimini gösteren ekran görüntüsü.

    • Tuvalde Olayları dönüştür veya hedef ekle'yi ve ardından SQL Kodu'nu seçin.

      Tuvaldeki olayları dönüştürmek için listedeki bir SQL işlecinin seçimini gösteren ekran görüntüsü.

  2. Olay akışınıza yeni bir SQL düğümü eklenir. SQL işlecini ayarlamaya devam etmek için kalem simgesini seçin.

    SQL işleç düğümündeki kalem simgesinin seçimini gösteren ekran görüntüsü.

  3. SQL Kodu bölmesinde, olay akışındaki SQL işleç düğümü için benzersiz bir ad belirtin.

  4. Sorgu alanında sorguyu düzenleyin veya Tam ekran kod düzenleyicisi görünümüne girmek için Sorguyu düzenle'yi seçin.

    İşlem adı girme kutusunu ve SQL Kodu bölmesinde sorguyu düzenleme düğmesini gösteren ekran görüntüsü.

  5. Tam ekran kod düzenleyicisi modunda sol tarafta bir giriş/çıkış gezgini bölmesi bulunur. Kod düzenleyicisi bölümü ayarlanabilir, böylece tercihlerinize göre yeniden boyutlandırabilirsiniz. Alttaki önizleme bölümü hem giriş verilerinizi hem de sorgunuzun test sonucunu görüntülemenizi sağlar.

    SQL tam düzenleyicisini gösteren ekran görüntüsü.

  6. Çıkışlar bölümündeki metni seçin ve hedef düğüm için bir ad girin. SQL operatörü, etkinlik merkezi, veri gölü evi, aktivatör veya akış dahil olmak üzere tüm Gerçek Zamanlı İstihbarat hedeflerini destekler.

    Artı düğmesinin seçili olduğu Çıkışlar alanını gösteren ekran görüntüsü.

  7. SQL işleci aracılığıyla işlenen verilerin yazıldığı çıkış hedefi için bir diğer ad veya ad belirtin.

    Çıktının adını gösteren ekran görüntüsü.

  8. Gerekli veri dönüşümü için SQL sorgusu ekleyin.

    Olay akışı, Azure Stream Analytics üzerine kuruludur ve Stream Analytics sorgu dilinin aynı sorgu semantiğini destekler. Söz dizimi ve kullanımı hakkında daha fazla bilgi edinmek için bkz. Azure Stream Analytics ve Eventstream Sorgu Dili Başvurusu.

    Temel sorgu yapısı aşağıdadır:

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

    Bu sorgu örneği, bir odada dakikada bir yüksek sıcaklıkların algılanması işlemini gösterir:

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

    Bu sorgu örneği, sıcaklığı kategorilere ayırmak için bir CASE deyim gösterir:

    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. Şeritte Test sorgusu komutunu kullanarak dönüştürme mantığını doğrulayın. Test sorgusu sonuçları , Test sonucu sekmesinde görüntülenir.

    Test sonucunu gösteren ekran görüntüsü.

  10. Testi bitirdiğinizde, olay akışı tuvaline geri dönmek için şeritte Kaydet'i seçin.

    Sorguyu test etme ve kaydetme komutları da dahil olmak üzere sorgu şeridini gösteren ekran görüntüsü.

  11. SQL Kodu bölmesinde Kaydet düğmesi etkinse ayarları kaydetmek için seçin.

    SQL Kodu bölmesini ve Kaydet düğmesini gösteren ekran görüntüsü.

  12. Hedefi yapılandırın.

    Tamamlanmış bir olay akışını gösteren ekran görüntüsü.

Diğer örnekler

Aşağıdaki örneklerde SQL işleciyle uygulayabileceğiniz yaygın gerçek zamanlı analiz senaryoları gösterilmektedir.

Dakika başına şehir satış toplaması - Şehre göre gruplandırılmış sabit, örtüşmeyen bir dakikalık satış toplamlarını hesaplamak için kullanın TumblingWindow :

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

Ani artış ve bot tespiti - Dakikada bir değerlendirilen beş dakikalık hareketli süre içinde olağan dışı derecede yüksek sayıda sipariş veren kullanıcıları algılamak için HoppingWindow kullanın.

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

Güncellenen taban çizgisine karşı anomali işaretleme - Güncellenen bir ortalama hesaplamak için HoppingWindow kullanın ve maksimum ölçüm değeri pencere içinde ortalamanın iki katını aşan cihazları işaretleyin; bu durum olası bir anomaliyi gösterir:

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)

Tek bir SQL işlecinden birden çok hedefe yazma

SQL işleciyle, SQL sorgunuza birden çok yan tümce ekleyerek ve birden çok çıkış tanımlayarak birden çok INTO çıkış havuzuna veya hedefe veri gönderebilirsiniz.

Sorgu düzenleyicisinde birden çok çıkış tanımlama

  1. SQL kodu bölmesini açmak için SQL işleç düğümünde Düzenle (Kalem simgesi) öğesini seçin.

  2. SQL Kodu bölmesinde Sorguyu düzenle'yi seçerek tam ekran kod düzenleyicisini açın.

    SQL Kodu bölmesini gösteren ekran görüntüsü.

  3. Tam ekran kod düzenleyicisinde + bölümünü seçerek yeni bir çıkış ekleyin. İstediğiniz çıkış türünü seçin. Sorguda kullanabileceğiniz çıktının bir diğer adını oluşturur. Oluşturulan çıkışın adını seçin ve istediğiniz bir ad girin.

    SQL tam düzenleyicisinde çıkış ekleme düğmesini gösteren ekran görüntüsü.

Birden çok SELECT ... INTO deyimi kullan

Her bir SELECT ifadesi farklı bir çıkışa yazabilir. Çıktıyı birden çok hedefe yazmak için sorguyu ekleyin.

Aşağıdaki sorgu örneğinde, ilk SELECT deyimi, RawArchive adlı bir çıkışa yazar (türü: Lakehouse) ve ikinci SELECT deyimi, AggregationResults adlı bir çıkışa yazar (türü: 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

Ara mantığı yeniden kullanma (en iyi yöntem)

Yinelenen mantık kullanmaktan kaçınmak istiyorsanız, bir WITH yan tümcesi kullanın ve buradan birden çok çıktıya dağıtın. Aşağıdaki örnekte, InputStream ortak tablo ifadesi (CTE), giriş akışından bir kez okunacak şekilde tanımlanır ve ardından iki SELECT deyim, farklı çıkışlara yazmak için InputStream CTE'ye başvurur. Giriş akışından birden çok kez okumayı önlediğinden bu yaklaşım daha verimlidir.

  1. Giriş akışından bir kez okumak ve birden çok çıkışa yazmak için SQL kod düzenleyicisine aşağıdaki sorguyu girin.

    
    --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. Sorgu sonucunu doğrulamak için Sorguyu test et'i seçin. Sorguda tanımlanan her çıkışın Test sonuçları panelinde ayrı bir sekmesi vardır.

    SQL tam düzenleyicisinde birden çok hedef sorgu ekleme örneğini gösteren ekran görüntüsü.

  3. Kaydet'i seçerek sorguyu kaydedin ve düzenleyiciden çıkın.

    SQL tam düzenleyicisinde Kaydet düğmesini gösteren ekran görüntüsü.

  4. SQL Düzenleyicisi bölmesinde Kaydet'i yeniden seçin.

  5. SQL işlecinden oluşturulan her hedef düğümü seçin ve her biri için hedef ayarlarını yapılandırın.

    Her hedef düğümün yapılandırma bağlantılarını gösteren ekran görüntüsü.

  6. Yapılandırmayı tamamladıktan sonra, olay akışınız sql işleci düğümünün iki çıkış hedefine sahip olduğu aşağıdaki örneğe benzemelidir.

    Birden çok çıkışı olan bir SQL işlecinin örneğini gösteren ekran görüntüsü.

SQL işlecinde olay sıralama ilkelerini yapılandırma

SQL işleciyle, olay veya uygulama süresini kullanarak verileri işleyebilirsiniz. Eventstream varsayılan olarak varış saatini kullanır. Olay zamanına göre işlemek için sorgunuzda kullanarak TIMESTAMP BY açıkça yapılandırmanız gerekir.

Örnek girdi

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

Olay zamanını kullanan örnek sorgu


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

Sql işlecinin gelişmiş ayarları altında geç varış ve sipariş dışı olayları için eşikler de ekleyebilirsiniz.

SQL işlecinin gelişmiş ayarlarını gösteren ekran görüntüsü.

Limitations

  • SQL işleci, tüm dönüştürme mantığınızı merkezileştirmek için tasarlanmıştır. Sonuç olarak, bunu aynı işleme yolu içindeki diğer yerleşik işleçler ile birlikte kullanamazsınız. Birden çok SQL işlecini tek bir yolda zincirleme de desteklenmez.

  • Topolojinize bir SQL işleci eklerseniz yeni hedef düğümler oluşturmanız gerekir. Mevcut hedef düğümler SQL işleciyle yeniden kullanılamaz.