stateMavg
语法
stateMavg(X, window)
该函数只能用作响应式状态引擎 metrics 中的函数。
参数
X 输入表的字段,仅支持数值类型。
window 正整数,表示窗口长度。
详情
计算基于历史结果的移动平均。
计算逻辑为:若窗口中 X 的元素个数小于 window,则直接输出 X;否则取输出字段前 window - 1 个值与当前 X 值求平均。
例子
定义一个响应式状态引擎,按照 sym 分组。
对于 A 组数据,窗口大小为 3,当 09:00:02 和 09:00:06 这两条数据到来时,窗口未满,因此直接输出 val 的值 2 和 6 到 total 列。下一条到来的 A 组数据的时间戳为 09:00:08,val=8,此时 A 组的第一个窗口触发计算,计算结果为 (2+6+8)\3=5.333333;接下来一条 A 组数据的时间戳为 09:00:10,val=10,计算结果为 (6+5.333333...+10)\3=7.11111,以此类推。
n=10
trade = table(09:00:00 + 1..n as time, rand(`A`B, n) as sym, 1..n as val)
outputTable = table(100:0, `sym`time`total, [STRING, SECOND, DOUBLE])
engine = createReactiveStateEngine(name="test", metrics=[<time>, <stateMavg(val, 3)>], dummyTable=trade, outputTable=outputTable, keyColumn=`sym, keepOrder=true)
engine.append!(trade)
select * from outputTable
sym | time | total |
---|---|---|
B | 09:00:01 | 1 |
A | 09:00:02 | 2 |
B | 09:00:03 | 3 |
B | 09:00:04 | 2.6667 |
B | 09:00:05 | 3.5556 |
A | 09:00:06 | 6 |
B | 09:00:07 | 4.4074 |
A | 09:00:08 | 5.3333 |
B | 09:00:09 | 5.6543 |
A | 09:00:10 | 7.1111 |