分析函数
# StreamSQL 分析函数
分析函数在连续事件流上做跨事件的状态计算——如"上一个值"、"是否变化"、"累积求和"。每条事件到达立刻求值,状态跨事件保留;可用在 SELECT 和 WHERE,典型用途是变化检测(CDC)。
可带 OVER ([PARTITION BY ...] [WHEN ...]) 子句控制分区与条件状态,但不能进 HAVING。完整语法、OVER 子句、在窗口查询中的用法见 分析函数详解。
# 函数列表
# lag —— 前一个值
语法: lag(field [, offset [, default [, ignoreNull]]])
描述: 返回当前行之前第 offset 个事件的值(默认 offset=1,不足步数返回 default)。
示例:
SELECT temperature, lag(temperature) AS prev FROM stream
# latest —— 最新非空值
语法: latest(field [, default])
描述: 返回指定字段的最新非空值(nil 不更新状态)。
示例:
SELECT latest(temperature) AS lt FROM stream
# had_changed —— 是否发生变化
语法: had_changed(ignoreNull, field[, field...])
描述: 与上次相比是否有变化(首次视为变化),返回布尔值;支持多列,"*" 对整行各列检测。
示例:
SELECT ts FROM stream WHERE had_changed(true, status) == true
# changed_col —— 变化的列值(单列标量)
语法: changed_col(ignoreNull, field)
描述: 发生变化时返回新值,未变化返回 nil(投影时省略该字段)。
示例:
SELECT changed_col(true, temperature) AS chg FROM stream
# changed_cols —— 多列变化值(动态列)
语法: changed_cols(prefix, ignoreNull, field[, field...])
描述: 返回 {prefix+列名: 新值},仅含发生变化的列;可用 "*" 对整行各列检测。仅 SELECT。
示例:
SELECT changed_cols("c_", true, temperature, humidity) FROM stream
# acc_sum / acc_max / acc_min / acc_count / acc_avg —— 生命周期累积
语法: acc_sum(field [, startExpr [, resetExpr]])(其余 acc_* 同理)
描述: 跨事件生命周期累积(求和 / 最值 / 计数 / 均值);可选 startExpr / resetExpr 做条件累计与归零。
示例:
SELECT acc_sum(power) AS total_power FROM stream