串流分析時間範圍函式簡介

在時間串流案例中,對時態時間範圍中包含的資料執行作業是常見的模式。 串流分析具有視窗化函式的原生支援,可讓開發人員以最不費力的方式撰寫複雜的串流處理作業。

有五種時態視窗可供選擇:

您要在串流分析工作的查詢語法子句 GROUP BY 中使用時間範圍函式。 您也可以使用 Windows() 函式,透過多個視窗彙總事件。

所有時間範圍作業都會在時間範圍結束時輸出結果。 當啟動串流分析作業時,您可以指定「作業輸出開始時間」,而且系統會自動擷取傳入串流中的先前事件,以在指定的時間輸出第一個時間範圍; 例如,當您開始使用 [立即] 選項時,其會立即開始發出資料。 時間範圍的輸出會是以使用的彙總函式為基礎的單一事件。 此輸出事件具有時間範圍結束的時間戳記,所有時間範圍函式都是以固定長度定義。

Diagram that shows the concept of Stream Analytics window functions.

輪轉時間範圍

使用輪轉時間範圍函式,將資料串流分成不同的時間區段並對其執行函式。

輪轉視窗的主要差異如下:

  • 不會重複。
  • 不會重疊。
  • 事件不能屬於一個以上的輪轉視窗。

Diagram that shows an example Stream Analytics tumbling window.

下列是範例的輸入資料:

戳記 CreatedAt 時區
1 2021-10-26T10:15:01 PST
5 2021-10-26T10:15:03 PST
4 2021-10-26T10:15:06 PST
... ... ...

下列是範例查詢:

SELECT System.Timestamp() as WindowEndTime, TimeZone, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY TimeZone, TumblingWindow(second,10)

以下是範例輸出:

WindowEndTime 時區 計數
2021-10-26T10:15:10 PST 5
2021-10-26T10:15:20 PST 2
2021-10-26T10:15:30 PST 4

跳動時間範圍

跳動時間範圍函式會在一段固定的時間向前跳動。 將其視為可以重疊且比時間範圍大小更常發出的輪轉時間範圍,可能更容易理解。 事件可以屬於多個跳動時間範圍結果集。 若要讓跳動時間範圍與輪轉時間範圍相同,請指定躍點大小與時間範圍大小相同。

Diagram that shows an example of the hopping window.

下列是範例資料:

戳記 CreatedAt 主題
1 2021-10-26T10:15:01 串流
5 2021-10-26T10:15:03 串流
4 2021-10-26T10:15:06 串流
... ... ...

下列是範例查詢:

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, HoppingWindow(second,10,5)

以下是範例輸出:

WindowEndTime 主題 計數
2021-10-26T10:15:10 串流 5
2021-10-26T10:15:15 串流 3
2021-10-26T10:15:20 串流 2
2021-10-26T10:15:25 串流 4
2021-10-26T10:15:30 串流 4

滑動視窗

滑動時間範圍與輪轉或跳動時間範圍不同,只有在時間範圍內容實際變更時,才會輸出時間點的事件。 換句話說,當事件進入或離開時間範圍時。 因此,每個時間範圍至少都有一個事件。 類似於跳動時間範圍,事件可以屬於一個以上的滑動時間範圍。

Diagram that shows an example of a sliding window.

下列是輸入資料的範例:

戳記 CreatedAt 主題
1 2021-10-26T10:15:10 串流
5 2021-10-26T10:15:12 串流
9 2021-10-26T10:15:15 串流
7 2021-10-26T10:15:15 串流
8 2021-10-26T10:15:27 串流

下列是範例查詢:

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SlidingWindow(second,10)
HAVING COUNT(*) >=3

輸出:

WindowEndTime 主題 計數
2021-10-26T10:15:15 串流 4
2021-10-26T10:15:20 串流 3

工作階段時間範圍

工作階段時間範圍函式會將在相近時間送達的事件分組,並將沒有任何資料的時間範圍篩選掉。 函式有三個主要參數:

  • Timeout
  • 最長持續時間
  • 分割區索引鍵 (選用)。

Diagram that shows a sample Stream Analytics session window.

工作階段時間範圍會在第一個事件發生時開始。 如果最後一個內嵌事件在指定的逾時內發生另一個事件,則會擴充時間範圍以包含新的事件。 否則,如果逾時內未發生任何事件,則會在逾時時關閉時間範圍。

如果在指定的逾時期間內持續發生事件,工作階段時間範圍將會持續延伸,直到達到最大持續期限為止。 持續時間檢查間隔上限會設定為與指定的持續時間上限相同。 例如,如果最大持續期限為 10,則時間範圍超出最大持續期限時的檢查會發生在 t = 0、10、20、30,以此類推。

提供分割區索引鍵時,事件會依索引鍵群組在一起,而工作階段時間範圍會個別套用至每個群組。 當您需要針對不同的使用者或裝置使用不同的工作階段時間範圍時,此分割功能將有其效用。

下列是輸入資料的範例:

戳記 CreatedAt 主題
1 2021-10-26T10:15:01 串流
2 2021-10-26T10:15:04 串流
3 2021-10-26T10:15:13 串流
... ... ...

下列是範例查詢:

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, SessionWindow(second,5,10)

輸出:

WindowEndTime 主題 計數
2021-10-26T10:15:09 串流 2
2021-10-26T10:15:24 串流 4
2021-10-26T10:15:31 串流 2
2021-10-26T10:15:39 串流 1

快照集視窗

快照集視窗會將具有相同時間戳記的事件分組。 不同於其他需要特定視窗函式的視窗化類型 (例如 SessionWindow()),您可以將 System.Timestamp() 新增至 GROUP BY 子句來套用快照集視窗。

Diagram that shows a sample Steam Analytics snapshot window.

下列是輸入資料的範例:

戳記 CreatedAt 主題
1 2021-10-26T10:15:04 串流
2 2021-10-26T10:15:04 串流
3 2021-10-26T10:15:04 串流
... ... ...

下列是範例查詢:

SELECT System.Timestamp() as WindowEndTime, Topic, COUNT(*) AS Count
FROM TwitterStream TIMESTAMP BY CreatedAt
GROUP BY Topic, System.Timestamp()

以下是範例輸出:

WindowEndTime 主題 計數
2021-10-26T10:15:04 串流 4
2021-10-26T10:15:10 串流 2
2021-10-26T10:15:13 串流 1
2021-10-26T10:15:22 串流 2

下一步

請參閱以下文章: