共用方式為


工作階段時間範圍

✅ Azure 串流分析 ✅ 網狀架構事件串流

會話視窗會群組抵達類似時間的事件,並篩選出沒有數據的時間週期。 會話視窗函式有三個主要參數:逾時、持續時間上限和分割索引鍵(選擇性)。

下圖說明具有一系列事件的數據流,以及它們如何對應至 5 分鐘逾時會話時段,以及持續時間上限為 10 分鐘。

串流分析會話視窗

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

如果在指定的逾時內持續發生事件,工作階段時間範圍將會持續擴充,直到達到持續時間上限為止。 請注意,持續時間檢查間隔上限會設定為與指定的最大持續時間相同。 例如,如果持續時間上限為 10,則會檢查視窗是否超過最大持續時間,且時間範圍是否會在 t = 0、10、20、30 等發生。這表示會話視窗的實際持續時間最多可以達到 maxDuration的兩倍。

因此,在數學上,如果滿足下列條件,我們的會話視窗就會結束:

工作階段視窗結束條件串

提供分割區索引鍵時,事件會依索引鍵群組在一起,而工作階段時間範圍會個別套用至每個群組。 這適用於您需要不同使用者或裝置的不同會話窗口的情況。

語法

{SESSIONWINDOW | SESSION} (timeunit, timeoutSize, maxDurationSize) [OVER (PARTITION BY partitionKey)]

{SESSIONWINDOW | SESSION} (Timeout(timeunit , timeoutSize), MaxDuration(timeunit, maxDurationSize)) [OVER (PARTITION BY partitionKey)]

備註

會話視窗可以透過上述兩種方式使用。

論點

timeunit 這是視窗化的時間單位。 下表列出所有有效的 timeunit 自變數。

Timeunit 縮寫
dd、d
小時 呵呵
分鐘 mi, n
ss、s
毫秒 毫秒
微秒 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)。