stateMavg

New in version 1.30.20.

语法

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

相关函数:conditionalIterate, stateIterate