row_window_session()
计算序列化行集中列的会话开始值。
语法
row_window_session
(
Expr ,
MaxDistanceFromFirst ,
MaxDistanceBetweenNeighbors [,
Restart] )
参数
客户 | 类型 | 必需 | 说明 |
---|---|---|---|
Expr | datetime |
✔️ | 一个表达式,其值在会话中分组在一起。 当 Expr 导致生成 null 值时,下一个值将启动一个新会话。 |
MaxDistanceFromFirst | timespan |
✔️ | 按照当前的 Expr 值与它在会话开头的值之间的最大距离确定新会话何时启动。 |
MaxDistanceBetweenNeighbors | timespan |
✔️ | 另一个按照 Expr 的一个值到下一个值之间的最大距离启动新会话的条件。 |
重启 | boolean |
如果已指定,则计算结果为 true 的每个值会立即重启会话。 |
详细了解语法约定。
返回
该函数在每个会话的开头返回值。 它使用以下概念计算模型:
按顺序遍历 Expr 值的输入序列。
对于每个值,它会决定是否创建新会话。
如果创建了新会话,该函数会返回 Expr 的当前值。 否则,它会返回 Expr 的上一个值。
注意
如果值按照逻辑 OR 操作满足以下条件,则它表示新会话:
- 如果没有以前的会话值,或者以前的会话值为 Null。
- 如果 Expr 的值等于或超过先前的会话值加上 MaxDistanceFromFirst。
- 如果 Expr 的值等于或超过 Expr 的先前值加上 MaxDistanceBetweenNeighbors。
- 如果指定
Restart
条件并计算得出true
。
示例
以下示例计算了表 datatable
的会话起始值,其中包含序列 ID 列和时间戳列来记录每条记录的时间。 数据按序列 ID 和时间戳排序,然后示例返回了 ID、时间戳和新的 SessionStarted 列的值。 会话不能超过一小时。 只要记录相隔不到五分钟且 ID 保持不变,它就会继续运行。 该示例包含相隔不到五分钟的记录。
datatable (ID:string, Timestamp:datetime) [
"1", datetime(2024-04-11 10:00:00),
"2", datetime(2024-04-11 10:18:00),
"1", datetime(2024-04-11 11:00:00),
"3", datetime(2024-04-11 11:30:00),
"2", datetime(2024-04-11 13:30:00),
"2", datetime(2024-04-11 10:16:00)
]
| sort by ID asc, Timestamp asc
| extend SessionStarted = row_window_session(Timestamp, 1h, 5m, ID != prev(ID))
输出
ID | 时间戳 | SessionStarted |
---|---|---|
1 | 2024-04-11T10:00:00Z | 2024-04-11T10:00:00Z |
1 | 2024-04-11T11:00:00Z | 2024-04-11T11:00:00Z |
2 | 2024-04-11T10:16:00Z | 2024-04-11T10:16:00Z |
2 | 2024-04-11T10:18:00Z | 2024-04-11T10:16:00Z |
2 | 2024-04-11T13:30:00Z | 2024-04-11T13:30:00Z |
3 | 2024-04-11T11:30:00Z | 2024-04-11T11:30:00Z |