上一 (Azure 流分析)

LAST 分析运算符允许在定义的约束内查找事件流中的最新事件。 它适用于计算上一个已知良好值 (例如不为 null) 、查找事件符合特定条件的最后一次等方案。

在流分析中,LAST (的作用域,即,使用 LIMIT DURATION 子句,始终将历史中与当前事件) 的距离限制为有限的时间间隔。 可以选择性地将 LAST 限制为仅考虑使用 PARTITION BY 和 WHEN 子句的特定属性或条件上与当前事件匹配的事件。 LAST 不受 WHERE 子句中的谓词、JOIN 子句中的联接条件或当前查询的 GROUP BY 子句中的分组表达式的影响。

的话:上一个 (表达式,默认) 等效于 LAG (<表达式>,0,<默认>) (,偏移值设置为“0”) 。><>< 请注意,LAG (<表达式> 0, <默认>) 实际上不是有效的构造,因为 LAG 采用大于或等于 1 的偏移量。 因此,必须改用 LAST 运算符,这是为了方便和更好的可读性而引入的。

语法

LAST(<scalar_expression >, [<default>])    
       OVER ( [PARTITION BY <partition key>] LIMIT DURATION(<unit>, <length>) [WHEN boolean_expression])  
  

参数

scalar_expression

要返回的值。 它可以是返回单个(标量)值的任何类型的表达式或通配符表达式“*”。 对于“*”,将返回整个事件,并将包含在结果事件中, (嵌套记录) 。 scalar_expression 不能包含其他分析函数或外部函数。

default

没有事件匹配条件时要返回的值。 如果未指定默认值,则返回 NULL。 如果limit_duration_clause中指定的时间间隔内没有以前的事件,或者该事件存在,但与when_clause中指定的条件不匹配,则“无事件”可能是这种情况。 如果该事件存在,并且 scalar_expression 的值为 NULL,则返回 NULL。 default 可以是列、子查询或其他表达式,但它不能包含其他分析函数或外部函数。 default 的类型必须与 scalar_expression 完全相同。

OVER ( [ partition_by_clause ] limit_duration_clause [when_clause])

partition_by_clause PARTITION BY <partition key> 子句仅请求其值为 的事件
<分区键与要考虑的当前事件的分区键> 相同。

limit_duration_clause DURATION (<单位>, <长度>) :
指定必须考虑当前事件中的历史记录量。 有关受支持的单位及其缩写的详细说明,请参阅 DATEDIFF。 如果在 DURATION 间隔内找不到足够的匹配事件,则 <返回默认值> 。

when_clause 指定要在 LAST 计算中考虑的事件的布尔条件。 如果在 DURATION 间隔内未找到匹配的事件,则 <返回默认值> 。 when_clause是可选的。

返回类型

指定 scalar_expression 的数据类型。 如果 scalar_expression 为以下值,则返回 NULL

一般备注

LAST 是不确定的。 按时间顺序处理事件。 如果有多个事件具有相同的时间戳,则按到达的顺序处理这些事件。

开窗函数 的结果集应用 LAST 可能会产生意外的结果。 窗口化函数会更改事件的时间戳,因为每个窗口操作都输出窗口末尾的事件。 在窗口操作后,可以使用 system.timestamp () 访问事件的当前时间戳,它将不同于原始事件时间属性。 如果在窗口操作之前无法移动 LAST,请考虑使用 CollectTop,按原始事件时间排序。

示例

查找最新的非 null 传感器读数:

SELECT  
       sensorId,   
       LAST(reading) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN reading IS NOT NULL)  
FROM input   

查找上次读取大于 50 的时间:

SELECT
       sensorId,
       LAST(System.Timestamp()) OVER (PARTITION BY sensorId LIMIT DURATION(hour, 1) WHEN reading > 50 )
FROM input 

另请参阅

ISFIRST(Azure 流分析)
延隔时间(Azure 流分析)