共用方式為


窗戶

✅ Azure 串流分析 ✅ 網狀架構事件串流

視窗化提供根據特定時段定義,在各種時間間隔內匯總事件的方式。 有四種時態視窗可供選擇: 輪轉跳動滑動會話

Windows() 函式會擴充此概念,以同時計算多個不同視窗定義的結果。 Windows() 函式可讓您指定多個視窗定義。 每個視窗定義都會計算查詢邏輯,而結果是所有窗口結果的聯集。

由於 Windows() 函式的結果包含多個視窗的組合,因此您必須區分不同的結果。 這可藉由將身分識別指派給可以使用 System.Window() 系統函式存取的每個視窗來完成。標識元。System.Window() 會傳回標識碼為其字段的記錄。

有兩種方式可以定義 Windows:

  • 使用 Window() 函式、 Window(ID 、window_definition)指派唯一識別,其中 ID 是 window_definition 的身分識別,而且是 Windows 建構中不區分大小寫 的 varchar(max) 值。

  • 如果沒有身分識別,則為 System.Window()。標識碼 會產生 Null 值。

語法

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

備註

Windows 建構無法巢狀。 身分識別必須提供給所有視窗定義,或指定給 none。

有縮短的視窗定義名稱,例如 「Tumbling」,可用於 Windows() 以避免重複 「window」 一詞,例如 。Windows(Window('MyWindow', TumblingWindow(… 縮短的名稱也可以在 Windows 建構之外使用。

使用 System.Window() 不是錯誤。 沒有 Windows 建構的標識碼,但其值會是 Null,因為窗口沒有提供任何身分識別。

如果使用 Window() 函式指定視窗定義,則所有視窗定義都必須使用 Window() 函式,而且所有不區分大小寫的標識碼都必須是唯一的。 不允許 Null。

System.Window() 函式

System.Window() 函式只能在 GROUP BY 語句的 SELECT 子句中使用,以擷取群組時間範圍的相關元數據。

函式會傳回 Record 類型的值,其中包含單一欄位 識別碼,其中保存事件所屬視窗的識別。

範例

建立窗口來計算各持續時間 10、20、30、40、50 和 60 分鐘的汽車,而不需視窗身分識別。

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 分鐘躍點和四個不同持續時間的視窗 - 1 分鐘、15 分鐘、30 分鐘和 60 分鐘。

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

根據參考數據表中指定的視窗持續時間,建立不同大小和篩選結果的視窗。

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  

另請參閱