✅ Azure 流分析 ✅ 构造事件流
对于每一行,OVER 子句确定在应用关联的聚合或分析函数之前行的分组。
可以在允许标量函数的任何位置使用 OVER 子句。 例如,可以在 SELECT、WHERE、JOIN 或 GROUP BY 子句中使用 OVER 子句。
OVER 子句直接从查询输入对行进行分组。 它不受 WHERE 子句中的谓词、JOIN 子句中的联接条件或 GROUP BY 子句中的分组条件的影响。
目前,OVER 子句支持以下聚合函数:
- 总和
- AVG
- MIN
- 麦克斯
语法
OVER ([<PARTITION BY clause>] <LIMIT DURATION clause> [<WHEN clause>])
<PARTITION BY clause> ::== PARTITION BY partition_key, ... [n]
<LIMIT DURATION clause> ::== LIMIT DURATION (unit, length)
<WHEN clause> ::== WHEN boolean_expression
论据
<PARTITION BY 子句>
指定对于聚合或分析函数,仅考虑具有相同 <partition_key> 的行。
<LIMIT DURATION 子句>
指定组中包含当前行的历史记录量。 有关支持的单位及其缩写的详细说明,请参阅 DATEDIFF 。
<WHEN 子句>
指定要包含在组中的行的布尔条件。
一般备注
对 开窗函数 的结果集应用具有 OVER 的聚合或分析函数可能会产生意外的结果。 窗口化函数会更改事件的时间戳,因为每个窗口作都会在窗口末尾输出事件。 在窗口作后,可以使用 system.timestamp()访问事件的当前时间戳,它与原始事件时间属性不同。
例子
按传感器计算过去 5 分钟内的平均温度:
SELECT AVG(temperature) OVER (PARTITION BY id LIMIT DURATION (minute, 5))
FROM input
如果资源在过去一小时内运行不正常,则引发警报:
SELECT 1 AS alert
FROM input
WHERE MAX(healthy) OVER (PARTITION BY id LIMIT DURATION (hour, 1)) = 0