了解視窗函式

已完成

串流處理的常見目標是將事件彙總成時態間隔或時段。 例如,計算每分鐘的社交媒體貼文數目,或計算每小時的平均降雨量。

Azure 串流分析包含對五個時態性視窗化函數的原生支援。 這些函式可讓您定義查詢中彙總資料的時態間隔。 支援的視窗化函數包括輪轉跳動滑動工作階段快照集

輪轉

輪轉視窗函數會將資料流分割成一系列連續且固定大小、非重疊的時間區段,並對其進行操作。 事件不可屬於多個的輪轉時間範圍。

A diagram illustrating a stream with a series of events mapped into 1-minute tumbling windows.

下列查詢所代表的輪轉時間範圍範例,會在每個一分鐘時間範圍中尋找讀數值上限。 視窗化函數可使用查詢語法的 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 的跳動視窗。 當您使用跳頻時間範圍時,事件可以屬於多個時間範圍結果集。

The diagram illustrates a stream with a series of events captured in 60 second hopping windows that occur every 30 seconds.

若要建立跳動視窗,您必須指定三個參數。 第一個參數表示時間單位,例如秒、分鐘或小時。 下列參數會設定視窗大小,指定每個視窗的持續時間。 最後一個必要的參數是躍點大小,指定每個視窗相對於前一個視窗的前進程度。 第四個參數是選用的,指定也可能使用的位移大小。

下列查詢示範如何使用將 timeunit 設定為 secondHoppingWindow()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 串流分析只會針對事件進入或離開時間範圍的時間點輸出事件。 因此,每個視窗都至少包含一個事件。 滑動視窗中的事件可以屬於多個滑動視窗,這與跳動視窗類似。

The diagram illustrates a stream with a series of events mapped into sliding windows of 1 minute.

下列查詢會使用 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)

會議

工作階段時間範圍函式會將在相近時間送達的事件聚集在一起,篩選掉沒有任何資料的時段。 有三個主要參數:逾時、持續時間上限和資料分割索引鍵 (選用)。

The diagram illustrates a stream with a series of events mapped into session windows with a 20-second timeout and a maximum duration of 60 seconds.

第一個事件發生時,即會啟動工作階段視窗。 假設在上一個內嵌事件的指定逾時內發生了另一個事件。 在此情況下,視窗將會擴充以納入新的事件。 但是,如果在指定的逾時期間內未發生其他事件,則會在逾時後隨即關閉視窗。 如果在指定的逾時內持續發生事件,工作階段時間範圍將會持續擴充,直到達到持續時間上限為止。

下列查詢會對點選流資料建立 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 子句,藉以使用快照集時間範圍。

The diagram illustrates a stream with a series of events mapped into snapshot windows.

例如,下列查詢會尋找精確同時發生的事件讀數值上限。

SELECT System.TimeStamp() AS WindowTime,
       MAX(Reading) AS MaxReading
INTO
    [output]
FROM
    [input] TIMESTAMP BY EventProcessedUtcTime
GROUP BY System.Timestamp()

System.Timestamp()GROUP BY 子句中會被視為快照集視窗定義,因為它會根據是否等同於時間戳記將事件分組到視窗中。