Esper:按命名 window 中的值分组并使用此分组值确定输出 id

Esper: group by value in a named window and use this grouped value to determine the output id

我想创建一个名为 window 的程序,它需要最后 20 秒的速度设置 (1-10) 和功率输出 (float)。然后我想查询这个以获得每个速度设置的平均功率(从 1-10)。对于每个速度设置,我需要指定一个特定的输出 ID。我尝试使用表达式将速度转换为此输出 ID 来执行此操作,但无论我采用哪种方式,我都会收到错误消息“表达式需要流名称作为参数”。

任何人都可以指出正确的表达式+如何使用表达式以获得我想要的输出吗?

如果您能指出更好的方法,那也很好。我是一个 esper 新手 + 不知道 Java 而我 运行 这些脚本在带有 CEP 堆栈的服务器上,我不知道幕后发生了什么,所以我觉得很难进行故障排除!

CREATE expression getOutput {
   speed =>
      when speed = 1 then 4000
      when speed = 2 then 5000
      ....
};

CREATE window Power.win:time(20 sec) as (power double, speed int);

INSERT into PortPower
SELECT 
    powerEvent.value as power,
    cast(speedSetting.value, int) as speed
FROM 
    Event(id = 1000).std:lastevent() as powerEvent,
    Event(id = 2000).std:lastevent() as speedEvent;
    

INSERT into Event
SELECT
    getOutput(powerEvent.speed) as id,
    avg(PowerEvent.power) as value
FROM
    Power as PowerEvent
GROUP BY
   PowerEvent.speed
HAVING
   count(PowerEvent.speed) > 0;

“expression requires stream name as a parameter”是我认为旧版本的错误消息,EPL 的一个版本只允许流名称作为表达式参数。尝试使用没有此限制的当前版本。

你的 EPL 比问题中问的要多。在提出问题时,最好只关注与特定问题相关的问题。请编辑问题并删除所有不相关的内容。每个 post 问一个最少的问题可以帮助我节省时间。

既然你坚持使用旧版本,你可以像这样使用插入:

insert into ResultStream select ... from ....

select ..., 
  case when speed = 1 then 4000 .... end as speedMappedToWhatever 
from ResultStream