2016-04-12 6 views
0

Я новичок, используя esper. У меня возникла проблема, которая не знала, как построить EPL.Как получить элемент последнего события (должен фильтровать нулевое значение), что группа с помощью некоторых ключей

Мое событие имеет эти элементы (ключ, индекс, e0, e1, e2 ....), и в каждом случае e1 может существовать или нет, я хочу получить последние "index"'s element:“e1” (исключая нулевое значение) и сумму (e2) группа «ключ».

Я написал EPL так:

select key, sum(e2), maxby(index).e1 as e1 from Event.win:time_batch(3 sec) group by key 

пример вывода, как показано ниже:

send event :{key=0, index=0, e0=5, e1=1} 

send event :{**key=3**, index=1, **e1=2**, e2=6} 

send event :{**key=3**, index=2, e0=0, e3=2} **//the event e1 is not exist** 

send event :{key=1, index=3, e2=8, e3=4} 

sliding win output: {key=0, sum(e2)=null, e1=1} 

sliding win output: {key=1, sum(e2)=8, e1=null} 

sliding win output: {**key=3**, sum(e2)=6, **e1=null**} 

вы видите, результат [ключ = 3] s e1 = нуль, но я ожидаю для фильтрации события e1 = null и должен выводиться e1 = 2

"maxby" не может добавить условие, например "fmax".

так как я могу отфильтровать его в EPL?

ответ

0

просто добавить "... от Event (e1 не равно нулю) ..."

+0

но ваш EPL фильтр событие, e1 равно нулю: «{** ключ = 3 **, индекс = 2, e0 = 0, e3 = 2} ", e3 = 2 тоже удалит, я не могу удалить этот evnet, если мне нужно заполнить e3. @ user650839 – alphacome

+0

Я думаю, что вы делаете что-то вроде «maxby (случай, когда e1 имеет значение null, а затем конец конца else else)», поскольку «maxby» может принимать любое выражение, включая вызов UDF. – user650839

+0

"maxby (случай, когда e1 имеет значение null, а затем конец else else end)" ---- Он работает, спасибо ~~~~~ @ user650839. вы действительно помогли мне. .. buut, когда я пытаюсь получить ключ группы индексов e1 'minby' как аналогичный выше, это не сработало, я пишу так:' minby (случай, когда e1 имеет значение null, а затем конец конца else else) ' отправить Событие: {key = 0, index = 12, e2 = 6, e3 = 3} отправить событие: {key = 0, index = 13, ** e1 = 4 **} вывод разворота: {key = 0, sum (e2) = 6, ** e1 = null **} Почему он не может работать? как его написать? – alphacome