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, которые бы соответствовали тому, что я пытаюсь сделать.

Спасибо всем, у кого есть понимание или направление для меня здесь.

РЕДАКТИРОВАТЬ: Если это не может быть сделано с помощью запроса, я открыт для изменения подписчика, или что-нибудь еще, если это необходимо.

1 ответ

Вы можете попросить абонента или слушателя сделать конкат. Для абонентов предусмотрена "Многорядная доставка". Или используйте таблицу, как показано ниже.

// 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)]
Другие вопросы по тегам