首页 > 解决方案 > Esper - 将多行中的值连接到列表

问题描述

我有一个返回多行的 Esper 查询,但我想获得一行,其中该行有一个列表(或连接字符串),其中包含我当前匹配的行(的对应列)中的所有值查询返回。

例如:

SELECT Name, avg(latency) as avgLatency
FROM MyStream.win:time(5 min)
GROUP BY Name
HAVING avgLatency / 1000 > 60
OUTPUT last every 5 min

回报:

Name    avgLatency
----    ----------
A       65
B       70
C       75

我真正想要的是:

Name
----
{A, B, C}

这可以通过查询本身来完成吗?我尝试使用子查询来完成这项工作,但我没有使用多个流。我在 Esper 文档中也找不到任何符合我想要做的事情的聚合函数或枚举函数。

感谢任何对我有任何见解或方向的人。

编辑:如果这不能通过查询来完成,我愿意改变订阅者,或者如果需要的话。

标签: espernesper

解决方案


您可以让订阅者或侦听器执行 concat。订户有“多行交付”。或使用如下表。

// create table to hold aggregation result
create table LatencyTable(name string primary key, avgLatency avg(double));

// update aggregations in table from events coming in
into LatencyTable select name, avg(latency) as avgLatency from MyStream#time(5 min) group by name;

// do a select with the "aggregate" enumeration method 
select (select * from LatencyTable where avgLatency > x).aggregate(....) from pattern[every timer:interval(5 min)]

推荐阅读