Windows (Azure 串流分析)
視窗功能提供根據特定視窗定義,根據各種時間間隔匯總事件的方法。 有四種時態視窗可供選擇: 輪轉、 跳動、 滑動和 會話。
Windows () 函式會擴充此概念,以同時計算多個不同視窗定義的結果。 Windows () 函式可讓您指定多個視窗定義。 每個視窗定義都會計算查詢邏輯,而結果會是所有視窗結果的聯集。
由於 Windows () 函式的結果包含多個視窗的組合,因此您必須區分不同的結果。 這可藉由將身分識別指派給每個可使用System.Window () 系統函式存取的視窗來完成。識別碼。System.Window () 會傳回識別碼為欄位的記錄。
有兩種方式可以定義 Windows:
使用 Window () 函式、 Window ( 識別碼 、window_definition ) 指派唯一身分識別,其中 ID 是 window_definition 的身分識別,而且不區分大小寫 的 Varchar (Windows 建構中的最大) 值。
沒有身分識別,在此情況下 為 System.Window () 。識別碼 會產生 Null 值。
Syntax
| Windows ( window_definition, … )
| Windows ( Window ( id , window_definition ), … )
window_definition =
| HoppingWindow ( …
| TumblingWindow ( …
| SlidingWindow ( …
| SessionWindow ( …
| Hopping ( …
| Tumbling ( …
| Sliding ( …
| Session ( …
注意
Windows建構不可巢狀。 身分識別必須提供給所有視窗定義,或提供給無。
有縮短的視窗定義名稱,例如 「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