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