row_window_session()

适用于:✅Azure 数据资源管理器Azure MonitorMicrosoft Sentinel

计算序列化行集中列的会话开始值。

语法

row_window_session ( Expr , MaxDistanceFromFirst , MaxDistanceBetweenNeighbors [, Restart] )

参数

客户 类型​​ 必需 说明
Expr datetime ✔️ 一个表达式,其值在会话中分组在一起。 当 Expr 导致生成 null 值时,下一个值将启动一个新会话。
MaxDistanceFromFirst timespan ✔️ 按照当前的 Expr 值与它在会话开头的值之间的最大距离确定新会话何时启动。
MaxDistanceBetweenNeighbors timespan ✔️ 另一个按照 Expr 的一个值到下一个值之间的最大距离启动新会话的条件。
重启 boolean 如果已指定,则计算结果为 true 的每个值会立即重启会话。

详细了解语法约定

返回

该函数在每个会话的开头返回值。 它使用以下概念计算模型:

  1. 按顺序遍历 Expr 值的输入序列。

  2. 对于每个值,它会决定是否创建新会话。

  3. 如果创建了新会话,该函数会返回 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