了解視窗函式

已完成

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

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

Tumbling

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

此圖表說明了一個串流,其中包含對應到 1 分鐘輪轉視窗的一系列事件。

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

此圖表說明了一個串流,其中包含每 30 秒發生一次在 60 秒跳動視窗中所擷取一系列事件。

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

下列查詢示範如何使用將 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)

Sliding

滑動時間範圍會針對時間範圍內容實際變更的時間點產生事件。 此函式模型會限制需要考慮的時間範圍數目。 Azure 串流分析只會針對事件進入或離開時間範圍的時間點輸出事件。 因此,每個視窗都至少包含一個事件。 滑動視窗中的事件可以屬於多個滑動視窗,這與跳動視窗類似。

此圖表說明了一個串流,其中包含對應到 1 分鐘的滑動視窗的一系列事件。

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

課程

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

此圖表說明了一個串流,其中包含對應到工作階段視窗的一系列事件,且逾時為 20 秒,最大持續時間為 60 秒。

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

下列查詢會對點選流資料建立 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 子句中會被視為快照集視窗定義,因為它會根據是否等同於時間戳記將事件分組到視窗中。