2017-10-11 4 views
0

J'ai récemment travaillé avec Esper et il y a une fonctionnalité que j'ai manquée dans la documentation mais elle pourrait exister.Esper: ajout d'un événement à la fenêtre Accumulation de temps à condition qu'une condition soit affectée à l'attribut

Je voudrais stocker certains événements jusqu'à ce que personne n'apparaisse pendant 15 sec, et quand cela arrive, relâchez-les tous.

Une requête fait exactement cela, il est:

select rstream * from MyEvent.win:time_accum(15 sec) 

je peux ajouter une condition sur la MyEvent comme

select rstream * from MyEvent where status = 'ALARM_END'.win:time_accum(15 sec) 

Et cela fonctionne parfaitement.

Maintenant, je voudrais ajouter une condition sur l'attribut eventType disant que:

si un nouvel événement est déclenché avec eventType xxxx mais il y a déjà un événement avec eventType xxxx dans la fenêtre puis ne pas ajouter cette nouvel événement popping à la fenêtre (et donc n'arrête pas le chronomètre de 0 à 15s).

Y a-t-il un moyen de faire cela?

Merci beaucoup!

EDIT:

En regardant de plus profondément dans mon besoin et de la documentation ESPER, je pense que mon besoin est plus satisfait

select * from MyEvent.win:time_length_batch(15 sec, 2) 

Je ne pense pas avoir besoin rstream que je veux juste accumuler soit 1 ou 2 éléments et les obtenir tous en une fois dans un tableau (de nouveaux événements, ça va).

Cependant, est-il possible d'ajouter une condition sur le premier (et le premier uniquement) MyEvent entrant dans la fenêtre? C'est status = 'ALARM_END'.

Répondre

0

Vous pouvez avoir une fenêtre nommée et vérifier cela avant de l'insérer.

// define named window 
create window MyEventWindow#time_accum(15) as MyEvent; 

// insert events that don't have 'xxx' 
insert into MyEventWindow select * from MyEvent(eventType != 'xxx'); 

// insert events that have 'xxx' only if not already there 
insert into MyEventWindow select * from MyEvent(eventType = 'xxx') 
    where not exists(select * from MyEventWindow where eventType='xxx'); 

// usual select 
select rstream * from MyEventWindow; 
+0

Bonjour, merci pour votre réponse. Je pense que je n'ai peut-être pas été clair dans ma question. 'xxxx' n'est pas censé être une variable fixe. – Tchak

+0

Supposons que la fenêtre actuelle comporte 3 événements avec les types d'événement 'eT1', 'eT2' et 'eT3'. Ensuite, si un nouvel événement est déclenché, il n'est ajouté à la fenêtre que si son eventType est différent de 'eT1', 'eT2' et 'eT3'. Cordialement. – Tchak

+0

Note: Je peux utiliser une solution non optimale en écrivant la troisième ligne pour chaque événement 'xxxx' dans ma liste d'événements. – Tchak