Windows

✅ Azure Stream Analytics ✅ Fabric Eventstream

Windowing menyediakan cara untuk mengagregasi peristiwa selama berbagai interval waktu tergantung pada definisi jendela tertentu. Ada empat jenis jendela temporal yang dapat dipilih: Tumbling, Hopping, Sliding, dan Session.

Fungsi Windows() memperluas konsep ini untuk secara bersamaan menghitung hasil dari beberapa definisi jendela yang berbeda. Fungsi Windows() memungkinkan Anda menentukan lebih dari satu definisi jendela. Logika kueri dihitung untuk masing-masing definisi jendela ini, dan hasilnya adalah gabungan dari semua hasil jendela.

Karena hasil fungsi Windows() berisi kombinasi beberapa jendela, Anda perlu membedakan antara hasil yang berbeda. Ini dilakukan dengan menetapkan identitas ke setiap jendela yang dapat diakses menggunakan fungsi sistem System.Window(). Id. System.Window() mengembalikan rekaman dengan Id sebagai bidangnya.

Ada dua cara untuk menentukan Windows:

  • Tetapkan identitas unik menggunakan fungsi Window(),Window ( ID , window_definition ), di mana ID adalah identitas window_definition dan merupakan nilai varchar(maks) yang tidak peka huruf besar/kecil dalam konstruksi Windows.

  • Tanpa identitas, dalam hal ini System.Window(). Id menghasilkan nilai null.

Sintaksis

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

Nota

Konstruksi Windows tidak dapat ditumpuk. Identitas harus diberikan ke semua definisi jendela atau diberikan kepada tidak ada.

Ada nama definisi jendela yang dipersingkat, seperti "Tumbling", yang dapat digunakan di Windows() untuk menghindari pengulangan kata "jendela" seperti di Windows(Window('MyWindow', TumblingWindow(…. Nama yang disingkat juga dapat digunakan di luar konstruksi Windows.

Ini bukan kesalahan untuk menggunakan System.Window(). Id tanpa konstruksi Windows, tetapi nilainya akan null karena tidak ada identitas yang diberikan ke jendela.

Jika definisi jendela ditentukan menggunakan fungsi Window(), maka semua definisi jendela harus menggunakan fungsi Window() dan semua ID yang tidak peka huruf besar/kecil harus unik. Null tidak diperbolehkan.

Fungsi System.Window()

Fungsi System.Window() hanya dapat digunakan dalam klausa SELECT dari pernyataan GROUP BY untuk mengambil metadata tentang jendela waktu pengelompokan.

Fungsi mengembalikan nilai jenis Rekaman yang berisi id bidang tunggal, yang menyimpan identitas jendela tempat peristiwa berada.

Contoh

Buat jendela untuk menghitung mobil untuk setiap durasi 10, 20, 30, 40, 50, dan 60 menit tanpa identitas jendela.

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)) 

Buat jendela dengan hop 1 menit dan empat durasi yang berbeda - 1 menit, 15 menit, 30 menit dan 60 menit.

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))) 

Buat jendela dengan ukuran yang berbeda dan filter hasil berdasarkan durasi jendela yang ditentukan dalam tabel Referensi.

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  

Lihat juga