Azure 串流分析) (工作階段視窗
會話視窗群組事件會抵達類似的時間,並篩選掉沒有數據的時段。 會話視窗函式有三個主要參數:逾時、最大持續時間和分割索引鍵, (選擇性) 。
下圖說明具有一系列事件的數據流,以及它們如何對應到會話時段 5 分鐘逾時,以及持續時間上限為 10 分鐘。
工作階段時間範圍始於第一個事件發生時。 如果另一個事件的發生時間在指定的逾時期間內 (從上次擷取事件開始計算),則時間範圍會延伸以包含新的事件。 或者,如果逾時期間內沒有任何事件發生,則時間範圍會在逾時之後關閉。
如果在指定的逾時期間內持續發生事件,工作階段時間範圍將會持續延伸,直到達到最大持續期限為止。 請注意,持續時間檢查間隔上限會設定為與指定的最大持續時間相同。 例如,如果持續時間上限為 10,則檢查視窗是否超過最大持續時間,發生於 t = 0、10、20、30 等。這表示會話視窗的實際持續時間最多可以達到 maxDuration 兩倍。
因此,在數學上,如果滿足下列條件,我們的會話視窗就會結束:
當提供資料分割索引鍵時,則會依索引鍵將事件分組在一起,且工作階段時間範圍會獨立套用至每個群組。 這適用於您需要不同使用者或裝置的不同會話窗口的情況。
Syntax
{SESSIONWINDOW | SESSION} (timeunit, timeoutSize, maxDurationSize) [OVER (PARTITION BY partitionKey)]
{SESSIONWINDOW | SESSION} (Timeout(timeunit , timeoutSize), MaxDuration(timeunit, maxDurationSize)) [OVER (PARTITION BY partitionKey)]
注意
會話視窗可以透過上述兩種方式使用。
引數
timeunit 這是 windowsize 的時間單位。 下表列出所有有效的 timeunit 引數。
Timeunit | 縮寫 |
---|---|
day | dd, d |
hour | hh |
minute | mi, n |
second | ss, s |
毫秒 | ms |
微秒 | mcs |
timeoutsize
描述工作階段視窗間距大小的大整數。 在間距大小內發生的數據會群組在相同的視窗中。
maxdurationsize
如果視窗大小總計超過檢查點的指定 maxDurationSize,則會關閉視窗,並在相同的點開啟新的視窗。 目前檢查間隔的大小等於 maxDurationSize。
partitionkey
選擇性參數,指定會話視窗操作的索引鍵。 如果指定,視窗只會將相同索引鍵的事件分組在一起。
範例
假設您有下列 JSON 資料:
[
// time: the timestamp when the user clicks on the link
// user_id: the id of the user
// url: the url the user clicked on
{
"time": "2017-01-26T00:00:00.0000000z",
"user_id": 0,
"url": "www.example.com/a.html"
},
{
"time": "2017-01-26T00:00:20.0000000z",
"user_id": 0,
"url": "www.example.com/b.html"
},
{
"time": "2017-01-26T00:00:55.0000000z",
"user_id": 1,
"url": "www.example.com/c.html"
},
// ...
]
若要測量每個使用者會話的長度,您可以使用下列查詢:
CREATE TABLE localinput(time DATETIME, user_id BIGINT, url NVARCHAR(MAX))
SELECT
user_id,
MIN(time) AS window_start,
System.Timestamp() AS window_end,
DATEDIFF(s, MIN(time), System.Timestamp()) AS duration_in_seconds
FROM localinput TIMESTAMP BY time
GROUP BY user_id, SessionWindow(minute, 2, 60) OVER (PARTITION BY user_id)
上述查詢會建立會話視窗,逾時為2分鐘、最大持續時間為60分鐘,以及user_id的數據分割索引鍵。 這表示將會為每個user_id建立獨立的會話視窗。 針對每個視窗,此查詢會產生包含user_id的輸出、視窗開始時間 (window_start) 、視窗結束 (window_end) ,以及用戶會話的總持續時間 (duration_in_seconds) 。