ekuiper rule help


SELECT *,
CASE
WHEN v1 > 62 THEN v1
WHEN v2 > 62 THEN v2
WHEN v3 > 62 THEN v3
WHEN v4 > 62 THEN v4
WHEN v5 > 62 THEN v5
END AS v6
FROM pullingRoomAlarm
group by id
WHERE v6 != NULL
AND event_time() - last_hit_time() > 600000

是想判断v1-v5持续超过62时(相同id),每10分钟sink一次,请问这么写有什么问题么

比如id=5中的v1大于62,则触发sink,等待10分钟,还是大于62,那就第二次触发sink,直到v1小于62

这个情况最好用规则流水线去做
第一条规则我们将v1…v5 选最大值聚合成一个 column v

select id, CASE
WHEN v1 > 62 THEN v1
WHEN v2 > 62 THEN v2
WHEN v3 > 62 THEN v3
WHEN v4 > 62 THEN v4
WHEN v5 > 62 THEN v5
ELSE v1 then v from pullingRoomAlarm

第一条规则将数据 sink 到内存 stream中

第二条规则则从内存 stream 中将数据按照10分钟一个窗口和 ID 进行切分,然后进行判断。

select id, min(v) as v from memoryStream group by tumblingWindow(mi,10), id having min(v) > 62

1 个赞