Windows (Azure Stream Analytics)

Pencereleme, belirli pencere tanımlarına bağlı olarak çeşitli zaman aralıklarında olayları toplamak için bir yol sağlar. Aralarından seçim yapabileceğiniz dört tür zamana bağlı pencere vardır: Atlayan, Atlamalı, Kayan ve Oturum.

Windows() işlevi, bu kavramı birden çok farklı pencere tanımının sonuçlarını aynı anda hesaplamak için genişletir. Windows() işlevi, birden fazla pencere tanımı belirtmenize olanak tanır. Sorgu mantığı bu pencere tanımlarının her biri için hesaplanır ve sonuç tüm pencere sonuçlarının birleşimidir.

Windows() işlevinin sonucu birden çok pencere bileşimi içerdiğinden, farklı sonuçları ayırt etmeniz gerekir. Bu, system.Window() sistem işlevi kullanılarak erişilebilen her pencereye bir kimlik atanarak yapılır . Id. System.Window() , alanı Kimliği olan bir kayıt döndürür.

Windows'ı tanımlamanın iki yolu vardır:

  • Window() işlevini ( Id , window_definition ) kullanarak benzersiz kimlikler atayın; burada kimlik, window_definition kimliğidir ve Windows yapısındaki benzersiz büyük/küçük harfe duyarsız varchar(max) değeridir.

  • Kimlikler olmadan, bu durumda System.Window(). Kimlik , null değerle sonuç verir.

Syntax

| Windows ( window_definition, … ) 
| Windows ( Window ( id , window_definition ), … ) 
 
window_definition = 
| HoppingWindow ( … 
| TumblingWindow ( … 
| SlidingWindow ( … 
| SessionWindow ( … 
| Hopping ( … 
| Tumbling ( … 
| Sliding ( … 
| Session ( …  
  

Not

Windows yapıları iç içe yerleştirilemez. Kimlikler tüm pencere tanımlarına verilmelidir veya yok olarak verilmelidir.

içinde olduğu gibi "window" sözcüğünün tekrarlanmaması için Windows() içinde kullanılabilen "Atlayan" gibi Windows(Window('MyWindow', TumblingWindow(…kısaltılmış pencere tanımı adları vardır. Kısaltılmış adlar, Windows yapısının dışında da kullanılabilir.

System.Window() kullanmak bir hata değildir. Windows yapısı olmayan kimlik, ancak pencereye hiçbir kimlik verilmediğinden değeri null olur.

Pencere tanımları Window() işlevi kullanılarak belirtilirse, tüm pencere tanımları Window() işlevini kullanmalıdır ve tüm büyük/küçük harfe duyarsız kimlikler benzersiz olmalıdır. Null değerine izin verilmiyor.

System.Window() işlevi

System.Window() işlevi, gruplandırma zamanı penceresiyle ilgili meta verileri almak için yalnızca GROUP BY deyiminin SELECT yan tümcesinde kullanılabilir.

İşlev, olayın ait olduğu pencerenin kimliğini tutan tek bir alan kimliği içeren Kayıt türünde bir değer döndürür.

Örnekler

Pencere kimliği olmadan 10, 20, 30, 40, 50 ve 60 dakika sürelerinin her birine ait arabaları saymak için pencere oluşturun.

SELECT 
    TollId, 
    COUNT(*) 
FROM Input TIMESTAMP BY EntryTime 
GROUP BY 
    TollId, 
    Windows( 
        TumblingWindow(minute, 10), 
        TumblingWindow(minute, 20), 
        TumblingWindow(minute, 30), 
        TumblingWindow(minute, 40), 
        TumblingWindow(minute, 50), 
        TumblingWindow(minute, 60)) 

1 dakikalık atlama ve dört farklı süreyle pencereler oluşturun - 1 dk, 15 dk, 30 dk ve 60 dk.

SELECT 
    System.Window().Id, 
    TollId, 
    COUNT(*) 
FROM Input TIMESTAMP BY EntryTime 
GROUP BY 
    TollId, 
    Windows( 
        Window('1 min', TumblingWindow(minute, 1)), 
        Window('15 min', HoppingWindow(minute, 15, 1)), 
        Window('30 min', HoppingWindow(minute, 30, 1)), 
        Window('60 min', HoppingWindow(minute, 60, 1))) 

Başvuru tablosunda belirtilen pencere süresine göre farklı boyutlarda pencereler oluşturun ve sonuçları filtreleyin.

WITH HoppingWindowResults AS
( 
    SELECT 
        System.Window().Id, 
        TollId, 
        COUNT(*) 
    FROM Input TIMESTAMP BY EntryTime 
    GROUP BY 
        TollId, 
        Windows( 
            Window('H10', Hopping(minute, 10, 5)), 
            Window('H20', Hopping(minute, 20, 5)), 
            Window('H30', Hopping(minute, 30, 5)), 
            Window('H40', Hopping(minute, 40, 5)), 
            Window('H50', Hopping(minute, 50, 5)), 
            Window('H60', Hopping(minute, 60, 5))) 
) 
 
SELECT HoppingWindowResults.* 
FROM HoppingWindowResults 
JOIN ReferenceTable ON  
    HoppingWindowResults.TollId = ReferenceTable.TollId 
    AND HoppingWindowResults.Id = ReferenceTable.windowId  

Ayrıca bkz.