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
我想创建一个名为 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