Как использовать "выберите concat(col)" в запросе агрегации сиддхи?

Как получить все данные одного столбца в запросе агрегации сиддхи. Например, у меня есть данные как:

column1 column2 column_uuid
1       a       uuid1
2       a       uuid1
3       a       uuid3
4       b       uuid4

Я хочу использовать запрос сиддхи как:

define stream Input (column1 int, column2 string, column_uuid string);

define stream Output (column2 string, amount long, uuid string);

@info(name='query')
from Input#window.time(30 sec)
select column2, count() as amount, concat(column_uuid) as uuid
group by column2
having amount > 2
insert into Output;

и я хочу получить результат как:

Event{timestamp=xxx, data=[a, 3, "uuid1,uuid2,uuid3"]}

1 ответ

Решение

В сиддхи есть два типа функций. Обычные "функции" и "агрегатные функции". Поскольку str:concat() не является агрегатной функцией, вы не можете использовать ее для получения желаемого результата.

Поэтому, возможно, вам придется написать свой собственный custom:concat() агрегатная функция, чтобы получить ожидаемый результат. Пожалуйста, обратитесь к следующим образцам при написании пользовательских агрегатных функций ( примеров). Чтобы получить приведенный выше вывод, вы можете просто сохранить глобальную строковую переменную в своем агрегаторе пользовательских атрибутов и добавить его в processAdd(Object data) метод (аналогично этому).

Другие вопросы по тегам