Over (Azure 流分析)
对于每一行,OVER 子句在应用关联的聚合或分析函数之前确定行的分组。
可以在允许标量函数的任何位置使用 OVER 子句。 例如,可以在 SELECT、WHERE、JOIN 或 GROUP BY 子句中使用 OVER 子句。
OVER 子句直接从查询输入对行进行分组。 它不受 WHERE 子句中的谓词、JOIN 子句中的联接条件或 GROUP BY 子句中的分组条件的影响。
目前,OVER 子句支持以下聚合函数:
- SUM
- AVG
- MIN
- MAX
语法
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