2016-06-15 9 views
0

Я хочу написать выражение esper epl, которое фильтрует события на основе возвращаемого значения, возвращаемого моей пользовательской функцией, мой пользователь должен принимать два объекта события за раз. поэтому я написал такой запрос.Пользовательские функции Esper, которые принимают два параметра

select window(*), 'CANDLE NAME' as candleType 
from CandleStickEvent(myFunction(*) = 'true').win:length(2) 

Хотя это работает она проходит только один объект CandleStickEvent в то время, но я хочу, чтобы передать как объекты в окне.

Для этого я также пробовал следующие запросы. Но ничего не получилось.

"select window(*), 'CANDLE NAME' as candleType " 
"from CandleStickEvent(myFunction(window(*)) = 'true').win:length(2) " 

Это дает сообщение об ошибке,

окно «» функция агрегирования требует, чтобы агрегированные события дают поток удалить; Уточнитните окно данных на поток или использовать «firstever», «lastever» или «п-й» вместо

I пытается следующий запрос также,

"select window(*), 'CANDLE NAME' as candleType " 
"from CandleStickEvent.win:length(2) " 
"output when myFunction(*) = 'true'" 

Это не дает какой-либо ошибки, но мой функция никогда не срабатывает.

Может кто-нибудь помочь мне найти способ выполнить это требование.

спасибо.

ответ

1

В SQL предложение having используется для фильтрации против агрегатов, а EPL соответствует стандарту sql-стандарта. Попробуйте «... иметь somefunc (окно (*))»