✅ Azure 串流分析 ✅ 網狀架構事件串流
快照集視窗會將具有相同時間戳記的事件分組。 不同於其他需要特定視窗函式(例如 SessionWindow()的視窗類型,您可以將 System.Timestamp() 新增至 GROUP BY 子句來套用快照集視窗。
下圖說明具有一系列事件的數據流,以及它們如何對應到快照集視窗。
System.Timestamp() 可以在 GROUP BY 子句中視為索引鍵數據行或快照集視窗定義,因為它會根據時間戳的相等性,將事件分組到視窗中。 與另一個視窗函式結合時,System.Timestamp() 會被視為索引鍵,而不是窗口定義。 System.Timestamp() 與其他視窗函式搭配使用時不會產生錯誤,不同於 GROUP BY 子句中使用多個視窗函式時。 在 GROUP BY 中使用 System.Timestamp() 和視窗函式,對於批處理結果很有用。
任何包含 System.Timestamp() 的表示式都不會被視為視窗。 例如, GROUP BY DATEPART(minute, System.Timestamp()) 失敗並出現「必須指定視窗」錯誤。
語法
System.Timestamp()
範例
基本範例
下列範例會傳回具有相同主題類型的推文計數,該主題類型與完全相同的時間發生:
SELECT Topic, COUNT(*)
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, System.Timestamp()
輪轉視窗快照範例
快照集窗口的常見用法是透過上述視窗函式將事件分組在單一時間戳之後匯總事件,例如下面的 TumblingWindow。
下列範例會在 30 分鐘內傳回相同使用者具有相同主題類型的推文計數:
WITH PerInterval AS (
SELECT Topic, User, COUNT(*)
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, User, TumblingWindow(minute, 30)
)
SELECT * INTO UserTopicsCount FROM PerInterval
若要在相同間隔內尋找每個主題的用戶數目和推文總數,您可以使用上一個查詢的結果。 由於輪轉窗口結果都會有對齊 30 分鐘界限的時間戳,因此您可以使用快照集視窗傳回每個界限的事件,因為它們都有相同的時間戳值。
SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp()
上一個查詢傳回相同 30 分鐘間隔內每個主題的用戶數目和推文總數。 若要每 2 小時取得一次相同的結果,請將 2 小時的輪轉視窗新增至 GROUP BY 子句。
下列查詢會從每 2 小時時間範圍結束時的所有四個 30 分鐘間隔傳回結果。
SELECT Topic, Users = COUNT(*), Total = SUM (count)
FROM PerInterval
GROUP BY Topic, System.Timestamp(), Tumbling (hour, 2)
匯總視窗範例
您可以使用 System.Timestamp() 作為匯總 Windows() 建構中的其中一個視窗。
SELECT
TollId,
COUNT(*)
FROM Input TIMESTAMP BY EntryTime
GROUP BY
TollId,
Windows(
TumblingWindow(minute, 10),
TumblingWindow(minute, 20),
System.Timestamp())