2017-01-06 3 views
0
  1. Ceci est mon schéma événement

EventA (FieldA string, FieldB string, FiledC string) EventB (FieldD string, FieldE string) Comment décrire cette scène complexe par cep?

  1. Je veux que la requête comme:
    1. événements Devide dans la fenêtre de groupe, groupe EVENTA par FieldA, FieldB , groupe EventB par FieldE
    2. Si des événements se sont produits dans cet ordre: EventA -> EventA -> EventA -> EventB -> EventB et distinct(EventA.FieldC) >= 3, et ev ery EventB.FieldE est égal à EventA.FieldB (partie jointe), puis génère un événement correlate.

Le problème est que: le nombre de Eventa (3) est pour le groupe window.For exemple: ["1","2","3"],["1","2","4"],["1","2","5"] peut déclencher "EventA -> EventA -> EventA" (3 événements dans une fenêtre de groupe), et ["1","2","3"],["1","3","4"],["1","4","5"] ne peut pas (3 fenêtre de groupe, chacun a 1 événement) et ainsi que les 2 EventB.

donc l'exemple complet est: ["1","2","3"],["1","2","4"],["1","2","5"],["a","2"],["b","2"]

je trouve qu'il est difficile, même dans le langage naturl à descript la situation, et je ne sais pas comment ce descript en CEP;

J'utilise le contexte dans esper pour résoudre le problème que le compte est pour la fenêtre de groupe pas pour le flux (dans siddhi, partition) .Il convient au single EventA ou EventB, mais si EventA et EventB doit faire un patten, les deux indépendants du contexte ne peut pas utiliser together.And j'ai essayé Context Nesting comme:

create context PartAB context PartA partition by FieldA and FieldB from EventA, context PartB partition by FieldE from EventB

et il semble ne fonctionne pas.

Merci à tous ceux qui peuvent aider cette situation.

Répondre

0

La première question qui vient à l'esprit est de savoir comment "FieldA, FieldB" et "FieldE" sont liés. C'est à dire. son est string-append par exemple où "FieldA || FieldB == FieldE" ou quelle est l'opération pour comparer ces champs?

En Esper utiliser un contexte comme celui-ci:

create context PartAB 
    partition by to_be_determined_A_B from EventA, 
       to_be_determined_E from EventB 

Ce contexte segmentés, et non imbriqués fait des événements sûrs atterrissent dans la même partition (contexte imbriqué créerait toutes les combinaisons possibles et ce n'est pas ce que vous voulez) .

Vous pouvez calculer le "to_be_determined_A_B" avec un insert-into ou en ajoutant un nouveau champ à votre événement. Voici un échantillon insertion dans:

insert into EventAWithFieldCombined select FieldA||FieldB combinedAB, * from EventA 

... et le contexte pourrait ressembler à ceci ...

create context PartAB 
    partition by combinedAB from EventAWithFieldCombined, 
       FieldE from EventB 
+0

merci beaucoup pour votre answer.But la seule relation entre EVENTA et EventB est que 'chaque B.FieldE est égal à chaque A.FieldB' (la partie de jointure) dans le motif' (A -> A -> A -> B -> B).' Je pense que c'est plus comme EventA groupwin par FieldA, FieldB, et EventB groupwin par FieldE (de sorte que je peux faire compter (opération) à chaque groupe pas à un flux) Et' chaque B.FieldE est égal à chaque A. FieldB' est la condition de corrélation pour le modèle (mais le groupwin ne peut pas être utilisé dans le modèle) –

+0

http://stackoverflow.com/questions/41523167/the-concept-groupwin-is-like-the-unaligned-windows Le problème clé est que, je divide EventA, événements EventB dans la fenêtre de groupe, mais je ne peux pas corréler entre eux utiliser pattern. –