Как использовать "выберите 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)
метод (аналогично этому).