了解視窗函式
串流處理的常見目標是將事件彙總成時態間隔或時段。 例如,計算每分鐘的社交媒體貼文數目,或計算每小時的平均降雨量。
Azure 串流分析包含對五個時態性視窗化函數的原生支援。 這些函式可讓您定義查詢中彙總資料的時態間隔。 支援的視窗化函數包括輪轉、跳動、滑動、工作階段和快照集。
輪轉
輪轉視窗函數會將資料流分割成一系列連續且固定大小、非重疊的時間區段,並對其進行操作。 事件不可屬於多個的輪轉時間範圍。
下列查詢所代表的輪轉時間範圍範例,會在每個一分鐘時間範圍中尋找讀數值上限。 視窗化函數可使用查詢語法的 GROUP BY 子句,套用於串流分析作業中。 下列查詢中的 GROUP BY
子句包含 TumblingWindow()
函式,會指定 1 分鐘的時間範圍大小。
SELECT DateAdd(minute,-1,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY TumblingWindow(minute, 1)
跳頻
跳動視窗函數會為排程的重疊視窗建立模型,在時間中以固定的期間跳進。 最簡單的理解方式,是將其視為會重疊、且會比時間範圍大小更頻繁發出的輪轉時間範圍。 事實上,輪轉視窗就是其 hop
等於 size
的跳動視窗。 當您使用跳頻時間範圍時,事件可以屬於多個時間範圍結果集。
若要建立跳動視窗,您必須指定三個參數。 第一個參數表示時間單位,例如秒、分鐘或小時。 下列參數會設定視窗大小,指定每個視窗的持續時間。 最後一個必要的參數是躍點大小,指定每個視窗相對於前一個視窗的前進程度。 第四個參數是選用的,指定也可能使用的位移大小。
下列查詢示範如何使用將 timeunit
設定為 second
的 HoppingWindow()
。 windowsize
為 60 秒,hopsize
為 30 秒。 此查詢會每隔 30 秒輸出一個事件,其中包含過去 60 秒內發生的讀數值上限。
SELECT DateAdd(second,-60,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY HoppingWindow(second, 60, 30)
滑動
滑動時間範圍會針對時間範圍內容實際變更的時間點產生事件。 此函式模型會限制需要考慮的時間範圍數目。 Azure 串流分析只會針對事件進入或離開時間範圍的時間點輸出事件。 因此,每個視窗都至少包含一個事件。 滑動視窗中的事件可以屬於多個滑動視窗,這與跳動視窗類似。
下列查詢會使用 SlidingWindow()
函式,在發生事件的每個一分鐘時間範圍中尋找讀數值上限。
SELECT DateAdd(minute,-1,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY SlidingWindow(minute, 1)
會議
工作階段時間範圍函式會將在相近時間送達的事件聚集在一起,篩選掉沒有任何資料的時段。 有三個主要參數:逾時、持續時間上限和資料分割索引鍵 (選用)。
第一個事件發生時,即會啟動工作階段視窗。 假設在上一個內嵌事件的指定逾時內發生了另一個事件。 在此情況下,視窗將會擴充以納入新的事件。 但是,如果在指定的逾時期間內未發生其他事件,則會在逾時後隨即關閉視窗。 如果在指定的逾時內持續發生事件,工作階段時間範圍將會持續擴充,直到達到持續時間上限為止。
下列查詢會對點選流資料建立 timeoutsize
為 20 秒、maximumdurationsize
為 60 秒的 SessionWindow
,以測量使用者工作階段長度。
SELECT DateAdd(second,-60,System.TimeStamp) AS WindowStart,
System.TimeStamp() AS WindowEnd,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY SessionWindow(second, 20, 60)
快照式
快照集視窗會依相同的時間戳記值將事件分組。 與其他時間範圍類型不同的是,不需要特定的時間範圍函式。 您可以將 System.Timestamp()
函式指定至查詢的 GROUP BY
子句,藉以使用快照集時間範圍。
例如,下列查詢會尋找精確同時發生的事件讀數值上限。
SELECT System.TimeStamp() AS WindowTime,
MAX(Reading) AS MaxReading
INTO
[output]
FROM
[input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY System.Timestamp()
System.Timestamp()
在 GROUP BY
子句中會被視為快照集視窗定義,因為它會根據是否等同於時間戳記將事件分組到視窗中。