这个
Azure Stream Analytics
是管理会话窗口的方法:
会话窗口组在相似时间到达的事件,筛选
没有数据的时间段。会话窗口函数
有三个主要参数:超时、最大持续时间和分区
下图演示了包含一系列事件和
如何将它们映射到5分钟超时的会话窗口,以及
最长持续时间为10分钟。
在上次摄取事件的指定超时内发生,然后
窗口将扩展以包含新事件。否则,如果没有事件
如果事件在指定的超时时间内继续发生,则会话
窗口将一直延长,直到达到最大持续时间。拜托
与指定的最大持续时间大小相同。例如,如果
持续时间是10,然后检查窗口是否超过最大值
因此,从数学上讲,如果
流分析会话窗口5分钟超时,最多10分钟
当提供分区键时,事件按
键和会话窗口将独立应用于每个组。
这对于需要不同会话窗口的情况非常有用
不同的用户或设备。
语法
:
SESSIONWINDOW(timeunit, timeoutSize, maxDurationSize) [OVER (PARTITION BY partitionKey)]
SESSIONWINDOW(Timeout(timeunit , timeoutSize), MaxDuration(timeunit, maxDurationSize)) [OVER (PARTITION BY partitionKey)]
:
描述会话窗口间隔大小的大整数。数据
出现在间隙大小内的,在相同的
最大持续时间大小
检查点,然后关闭窗口并打开新窗口
在同一点上。当前,检查间隔的大小为
等于maxDurationSize。
一个可选参数,指定会话窗口
手术结束了。如果指定,则窗口将仅组合在一起
实例
:
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分钟,分区键为
每个用户id。对于每个窗口,此查询将生成
窗口结束(窗口结束)和用户的总持续时间
会话(持续时间以秒为单位)。