串流分析時間範圍函式簡介
在時間串流案例中,對時態時間範圍中包含的資料執行作業是常見的模式。 串流分析具有視窗化函式的原生支援,可讓開發人員以最不費力的方式撰寫複雜的串流處理作業。
有五種時態視窗可供選擇:
您要在串流分析工作的查詢語法子句 GROUP BY 中使用時間範圍函式。 您也可以使用 Windows() 函式,透過多個視窗彙總事件。
所有時間範圍作業都會在時間範圍結束時輸出結果。 當啟動串流分析作業時,您可以指定「作業輸出開始時間」,而且系統會自動擷取傳入串流中的先前事件,以在指定的時間輸出第一個時間範圍; 例如,當您開始使用 [立即] 選項時,其會立即開始發出資料。 時間範圍的輸出會是以使用的彙總函式為基礎的單一事件。 此輸出事件具有時間範圍結束的時間戳記,所有時間範圍函式都是以固定長度定義。
輪轉時間範圍
使用輪轉時間範圍函式,將資料串流分成不同的時間區段並對其執行函式。
輪轉視窗的主要差異如下:
- 不會重複。
- 不會重疊。
- 事件不能屬於一個以上的輪轉視窗。
下列是範例的輸入資料:
戳記 | 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 |
跳動時間範圍
跳動時間範圍函式會在一段固定的時間向前跳動。 將其視為可以重疊且比時間範圍大小更常發出的輪轉時間範圍,可能更容易理解。 事件可以屬於多個跳動時間範圍結果集。 若要讓跳動時間範圍與輪轉時間範圍相同,請指定躍點大小與時間範圍大小相同。
下列是範例資料:
戳記 | 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 |
滑動視窗
滑動時間範圍與輪轉或跳動時間範圍不同,只有在時間範圍內容實際變更時,才會輸出時間點的事件。 換句話說,當事件進入或離開時間範圍時。 因此,每個時間範圍至少都有一個事件。 類似於跳動時間範圍,事件可以屬於一個以上的滑動時間範圍。
下列是輸入資料的範例:
戳記 | 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
- 最長持續時間
- 分割區索引鍵 (選用)。
工作階段時間範圍會在第一個事件發生時開始。 如果最後一個內嵌事件在指定的逾時內發生另一個事件,則會擴充時間範圍以包含新的事件。 否則,如果逾時內未發生任何事件,則會在逾時時關閉時間範圍。
如果在指定的逾時期間內持續發生事件,工作階段時間範圍將會持續延伸,直到達到最大持續期限為止。 持續時間檢查間隔上限會設定為與指定的持續時間上限相同。 例如,如果最大持續期限為 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 子句來套用快照集視窗。
下列是輸入資料的範例:
戳記 | 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 |
下一步
請參閱以下文章: