Azure 串流分析) (工作階段視窗

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

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

Stream Analytics 工作階段時間範圍

工作階段時間範圍始於第一個事件發生時。 如果另一個事件的發生時間在指定的逾時期間內 (從上次擷取事件開始計算),則時間範圍會延伸以包含新的事件。 或者,如果逾時期間內沒有任何事件發生,則時間範圍會在逾時之後關閉。

如果在指定的逾時期間內持續發生事件,工作階段時間範圍將會持續延伸,直到達到最大持續期限為止。 請注意,持續時間檢查間隔上限會設定為與指定的最大持續時間相同。 例如,如果持續時間上限為 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) 。