Esper - объединить значения из нескольких строк в список - PullRequest
0 голосов
/ 03 октября 2018

У меня есть запрос 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 Ответ

0 голосов
/ 06 октября 2018

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

// 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)]
...