Sql Esper:在命名窗口中按值分组,并使用此分组值确定输出id

Sql Esper:在命名窗口中按值分组,并使用此分组值确定输出id,sql,influxdb,complex-event-processing,esper,Sql,Influxdb,Complex Event Processing,Esper,我想创建一个命名窗口,该窗口使用最后20秒的速度设置(1-10)和功率输出(浮点)。然后我想查询这个,以获得每速度的平均功率设置(从1-10)。对于每个速度设置,我都需要指定一个特定的输出id。我尝试使用表达式将速度转换为该输出id,但无论采用何种方式,都会出现错误“表达式需要流名称作为参数” 谁能指出正确的表达式+如何使用该表达式以获得所需的输出 如果你能指出一个更好的方法,那也很好。我是一个esper新手+不懂Java,我在一个带有CEP堆栈的服务器上运行这些脚本,我不知道引擎盖下发生了什么

我想创建一个命名窗口,该窗口使用最后20秒的速度设置(1-10)和功率输出(浮点)。然后我想查询这个,以获得每速度的平均功率设置(从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 parameter”(表达式需要流名称作为参数)是我认为较旧版本的错误消息,是一个只允许表达式参数使用流名称的EPL版本。尝试使用没有此限制的当前版本

你的EPL比问题中提到的要多。当问一个问题时,最好只关注与特定问题相关的问题。请编辑问题并删除所有不相关的内容。在每篇文章中只问一个简单明了的问题可以帮我节省时间

由于您坚持使用旧版本,因此可以使用以下类似的方法:

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

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

谢谢你的答复。不幸的是,我没有发言权的版本和基础设施不能改变这个项目至少。我确实减少了脚本,试图制作一个MRE,但由于我不知道哪里出了问题,我不想忽略我所犯的错误!看看脚本,我写的东西有什么明显的错误吗?就像我说的,你可能使用了一些旧版本,这就是问题所在。我提出了一个替代方案。