2016-06-15 1 views
0

Je veux écrire une expression esper epl qui filtre les événements en fonction de la valeur retournée par ma fonction définie par l'utilisateur, mon utilisateur défini doit prendre deux objets événement à la fois. J'ai donc écrit une requête comme celle-ci.Esper fonctions définies par l'utilisateur qui prend deux paramètres

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

Bien que cela a fonctionné il passe un seul objet CandleStickEvent à un moment, mais je veux passer les deux objets dans la fenêtre.

Pour y parvenir, j'ai également essayé les requêtes suivantes. Mais rien n'a fonctionné.

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

Cela donne ce message d'erreur,

La fonction d'agrégation 'fenêtre' exige que les événements agrégés fournissent un flux remove; S'il vous plaît définir une fenêtre de données sur le flux ou utiliser « firstever », « lastever » ou « nième » au lieu

I tente requête suivante aussi,

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

Il ne donne aucune erreur mais mon la fonction n'est jamais déclenchée.

Quelqu'un peut-il m'aider à trouver un moyen de répondre à cette exigence.

Merci.

Répondre

1

En SQL, la clause d'inclusion est utilisée pour filtrer les agrégations et EPL est conforme à la norme SQL. Essayez "... ayant somefunc (window (*))"