Re: [Dev] pattern for one to many match or multi match events ?
cool, Thank you ! On Sun, Sep 17, 2017 at 11:58 PM, Grainier Pererawrote: > Hi Jay, > > In that case, you can either remove events from the table which are older > than 24hrs, or you can include a condition to the join query to ignore > events that are older than 24hrs. Please refer to the sample below; > > > @Plan:name('TestExecutionPlan') >> define stream publisher (pid string, time string); >> define stream subscriber (pid string, sid string, time string); >> define table publisherTable (pid string, time string, timestamp long); >> define trigger purgeTrigger at '0 0 0 ? * *'; > > >> -- Purge records older than 24 hours >> >> >> *from purgeTrigger delete publisherTable on (triggered_time - >> publisherTable.timestamp) >= 1000 * 60 * 60 * 24; * > > >> from publisher >> select pid, time, time:timestampInMilliseconds() as timestamp >> insert into publisherTable; > > >> -- Double check the time range >> from subscriber as s join publisherTable as p >> on p.pid == s.pid *AND ((time:timestampInMilliseconds() - p.timestamp) < >> 1000 * 60 * 60 * 24)* >> select p.pid, s.sid, s.time >> insert into AlertStream; > > > > Regards, > Grainier. > > On Fri, Sep 15, 2017 at 2:21 PM, Jayesh Senjaliya > wrote: > >> Hi Grainier, >> >> even table approach make sense, but is there a way to limit the event >> table to keep the events for let say 24 hour or so and then discard it ? >> >> Thanks for looking into this. >> Jay >> >> >> >> >> On Thu, Sep 14, 2017 at 11:51 PM, Grainier Perera >> wrote: >> >>> Hi Jay, >>> >>> In your pattern, when a match found, it will discard that event (e1 in >>> your scenario), so it won't get compared with other events. However, if you >>> need to hold that event and match it with more than a single event, then >>> you can use an event table as shown below. >>> >>> @Plan:name('TestExecutionPlan') define stream publisher (pid string, time string); define stream subscriber (pid string, sid string, time string); define table publisherTable (pid string, time string); >>> >>> from publisher insert into publisherTable; >>> >>> >>> >>> -- Option 1 >>> >>> from subscriber[publisherTable.pid == pid in publisherTable] select pid, time insert into AlertStream1; >>> >>> >>> >>> -- Option 2 from subscriber as s join publisherTable as p on p.pid == s.pid select p.pid, s.sid, s.time insert into AlertStream2; >>> >>> >>> Regards, >>> Grainier. >>> >>> On Fri, Sep 15, 2017 at 11:41 AM, Jayesh Senjaliya >>> wrote: >>> Hello WSO2 community. I am trying to implement a siddhi query where 1 event in publisher can have multiple event in subscriber. this fits well in pattern query but it looks like it outputs as soon as 1 event is matched and there is no way to window or tell the count. here is the execution plan i have came up with that should have matches all mapping but its not working that way, it only outputs 1 event, the first one that matches. can someone please look at this and help me figure out why it is not working? or what would be right way to get this? Thanks Jay Execution Plan: @Plan:name('TestExecutionPlan') define stream publisher (pid string, time string); define stream subscriber (pid string, sid string, time string); @info(name = 'query2') from every( e1=publisher ) -> e2=subscriber[ e2.pid == e1.pid ] select e1.pid, e2.sid, e2.time insert into AlertStream; here is the sample events if you want to try on siddhi-try-it tool publisher=[1,2017-08-15 01:08:30.253] publisher=[2,2017-08-15 02:08:30.253] publisher=[3,2017-08-15 03:08:30.253] subscriber=[1, 12,2017-08-15 21:08:30.253] subscriber=[1, 13,2017-08-15 21:10:30.253] ___ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev >>> >>> >>> -- >>> Grainier Perera >>> Senior Software Engineer >>> Mobile : +94716122384 <+94%2071%20612%202384> >>> WSO2 Inc. | http://wso2.com >>> lean.enterprise.middleware >>> >> >> > > > -- > Grainier Perera > Senior Software Engineer > Mobile : +94716122384 <+94%2071%20612%202384> > WSO2 Inc. | http://wso2.com > lean.enterprise.middleware > ___ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev
Re: [Dev] pattern for one to many match or multi match events ?
Hi Jay, In that case, you can either remove events from the table which are older than 24hrs, or you can include a condition to the join query to ignore events that are older than 24hrs. Please refer to the sample below; @Plan:name('TestExecutionPlan') > define stream publisher (pid string, time string); > define stream subscriber (pid string, sid string, time string); > define table publisherTable (pid string, time string, timestamp long); > define trigger purgeTrigger at '0 0 0 ? * *'; > -- Purge records older than 24 hours > > > *from purgeTrigger delete publisherTable on (triggered_time - > publisherTable.timestamp) >= 1000 * 60 * 60 * 24; * > from publisher > select pid, time, time:timestampInMilliseconds() as timestamp > insert into publisherTable; > -- Double check the time range > from subscriber as s join publisherTable as p > on p.pid == s.pid *AND ((time:timestampInMilliseconds() - p.timestamp) < > 1000 * 60 * 60 * 24)* > select p.pid, s.sid, s.time > insert into AlertStream; Regards, Grainier. On Fri, Sep 15, 2017 at 2:21 PM, Jayesh Senjaliyawrote: > Hi Grainier, > > even table approach make sense, but is there a way to limit the event > table to keep the events for let say 24 hour or so and then discard it ? > > Thanks for looking into this. > Jay > > > > > On Thu, Sep 14, 2017 at 11:51 PM, Grainier Perera > wrote: > >> Hi Jay, >> >> In your pattern, when a match found, it will discard that event (e1 in >> your scenario), so it won't get compared with other events. However, if you >> need to hold that event and match it with more than a single event, then >> you can use an event table as shown below. >> >> @Plan:name('TestExecutionPlan') >>> define stream publisher (pid string, time string); >>> define stream subscriber (pid string, sid string, time string); >>> define table publisherTable (pid string, time string); >> >> >>> from publisher >>> insert into publisherTable; >> >> >> >> -- Option 1 >> >> from subscriber[publisherTable.pid == pid in publisherTable] >>> select pid, time >>> insert into AlertStream1; >> >> >> >> -- Option 2 >>> from subscriber as s join publisherTable as p >>> on p.pid == s.pid >>> select p.pid, s.sid, s.time >>> insert into AlertStream2; >> >> >> Regards, >> Grainier. >> >> On Fri, Sep 15, 2017 at 11:41 AM, Jayesh Senjaliya >> wrote: >> >>> Hello WSO2 community. >>> >>> I am trying to implement a siddhi query where 1 event in publisher can >>> have multiple event in subscriber. this fits well in pattern query but it >>> looks like it outputs as soon as 1 event is matched and there is no way to >>> window or tell the count. >>> >>> here is the execution plan i have came up with that should have matches >>> all mapping but its not working that way, it only outputs 1 event, the >>> first one that matches. >>> >>> can someone please look at this and help me figure out why it is not >>> working? or what would be right way to get this? >>> >>> Thanks >>> Jay >>> >>> >>> Execution Plan: >>> >>> @Plan:name('TestExecutionPlan') >>> define stream publisher (pid string, time string); >>> define stream subscriber (pid string, sid string, time string); >>> >>> @info(name = 'query2') >>> from every( e1=publisher ) -> e2=subscriber[ e2.pid == e1.pid ] >>> select e1.pid, e2.sid, e2.time >>> insert into AlertStream; >>> >>> >>> here is the sample events if you want to try on siddhi-try-it tool >>> >>> publisher=[1,2017-08-15 01:08:30.253] >>> publisher=[2,2017-08-15 02:08:30.253] >>> publisher=[3,2017-08-15 03:08:30.253] >>> >>> subscriber=[1, 12,2017-08-15 21:08:30.253] >>> subscriber=[1, 13,2017-08-15 21:10:30.253] >>> >>> >>> >>> >>> >>> >>> >>> >>> >>> ___ >>> Dev mailing list >>> Dev@wso2.org >>> http://wso2.org/cgi-bin/mailman/listinfo/dev >>> >>> >> >> >> -- >> Grainier Perera >> Senior Software Engineer >> Mobile : +94716122384 <+94%2071%20612%202384> >> WSO2 Inc. | http://wso2.com >> lean.enterprise.middleware >> > > -- Grainier Perera Senior Software Engineer Mobile : +94716122384 WSO2 Inc. | http://wso2.com lean.enterprise.middleware ___ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev
Re: [Dev] pattern for one to many match or multi match events ?
Hi Grainier, even table approach make sense, but is there a way to limit the event table to keep the events for let say 24 hour or so and then discard it ? Thanks for looking into this. Jay On Thu, Sep 14, 2017 at 11:51 PM, Grainier Pererawrote: > Hi Jay, > > In your pattern, when a match found, it will discard that event (e1 in > your scenario), so it won't get compared with other events. However, if you > need to hold that event and match it with more than a single event, then > you can use an event table as shown below. > > @Plan:name('TestExecutionPlan') >> define stream publisher (pid string, time string); >> define stream subscriber (pid string, sid string, time string); >> define table publisherTable (pid string, time string); > > >> from publisher >> insert into publisherTable; > > > > -- Option 1 > > from subscriber[publisherTable.pid == pid in publisherTable] >> select pid, time >> insert into AlertStream1; > > > > -- Option 2 >> from subscriber as s join publisherTable as p >> on p.pid == s.pid >> select p.pid, s.sid, s.time >> insert into AlertStream2; > > > Regards, > Grainier. > > On Fri, Sep 15, 2017 at 11:41 AM, Jayesh Senjaliya > wrote: > >> Hello WSO2 community. >> >> I am trying to implement a siddhi query where 1 event in publisher can >> have multiple event in subscriber. this fits well in pattern query but it >> looks like it outputs as soon as 1 event is matched and there is no way to >> window or tell the count. >> >> here is the execution plan i have came up with that should have matches >> all mapping but its not working that way, it only outputs 1 event, the >> first one that matches. >> >> can someone please look at this and help me figure out why it is not >> working? or what would be right way to get this? >> >> Thanks >> Jay >> >> >> Execution Plan: >> >> @Plan:name('TestExecutionPlan') >> define stream publisher (pid string, time string); >> define stream subscriber (pid string, sid string, time string); >> >> @info(name = 'query2') >> from every( e1=publisher ) -> e2=subscriber[ e2.pid == e1.pid ] >> select e1.pid, e2.sid, e2.time >> insert into AlertStream; >> >> >> here is the sample events if you want to try on siddhi-try-it tool >> >> publisher=[1,2017-08-15 01:08:30.253] >> publisher=[2,2017-08-15 02:08:30.253] >> publisher=[3,2017-08-15 03:08:30.253] >> >> subscriber=[1, 12,2017-08-15 21:08:30.253] >> subscriber=[1, 13,2017-08-15 21:10:30.253] >> >> >> >> >> >> >> >> >> >> ___ >> Dev mailing list >> Dev@wso2.org >> http://wso2.org/cgi-bin/mailman/listinfo/dev >> >> > > > -- > Grainier Perera > Senior Software Engineer > Mobile : +94716122384 <+94%2071%20612%202384> > WSO2 Inc. | http://wso2.com > lean.enterprise.middleware > ___ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev
Re: [Dev] pattern for one to many match or multi match events ?
Hi Jay, In your pattern, when a match found, it will discard that event (e1 in your scenario), so it won't get compared with other events. However, if you need to hold that event and match it with more than a single event, then you can use an event table as shown below. @Plan:name('TestExecutionPlan') > define stream publisher (pid string, time string); > define stream subscriber (pid string, sid string, time string); > define table publisherTable (pid string, time string); > from publisher > insert into publisherTable; -- Option 1 from subscriber[publisherTable.pid == pid in publisherTable] > select pid, time > insert into AlertStream1; -- Option 2 > from subscriber as s join publisherTable as p > on p.pid == s.pid > select p.pid, s.sid, s.time > insert into AlertStream2; Regards, Grainier. On Fri, Sep 15, 2017 at 11:41 AM, Jayesh Senjaliyawrote: > Hello WSO2 community. > > I am trying to implement a siddhi query where 1 event in publisher can > have multiple event in subscriber. this fits well in pattern query but it > looks like it outputs as soon as 1 event is matched and there is no way to > window or tell the count. > > here is the execution plan i have came up with that should have matches > all mapping but its not working that way, it only outputs 1 event, the > first one that matches. > > can someone please look at this and help me figure out why it is not > working? or what would be right way to get this? > > Thanks > Jay > > > Execution Plan: > > @Plan:name('TestExecutionPlan') > define stream publisher (pid string, time string); > define stream subscriber (pid string, sid string, time string); > > @info(name = 'query2') > from every( e1=publisher ) -> e2=subscriber[ e2.pid == e1.pid ] > select e1.pid, e2.sid, e2.time > insert into AlertStream; > > > here is the sample events if you want to try on siddhi-try-it tool > > publisher=[1,2017-08-15 01:08:30.253] > publisher=[2,2017-08-15 02:08:30.253] > publisher=[3,2017-08-15 03:08:30.253] > > subscriber=[1, 12,2017-08-15 21:08:30.253] > subscriber=[1, 13,2017-08-15 21:10:30.253] > > > > > > > > > > ___ > Dev mailing list > Dev@wso2.org > http://wso2.org/cgi-bin/mailman/listinfo/dev > > -- Grainier Perera Senior Software Engineer Mobile : +94716122384 WSO2 Inc. | http://wso2.com lean.enterprise.middleware ___ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev
[Dev] pattern for one to many match or multi match events ?
Hello WSO2 community. I am trying to implement a siddhi query where 1 event in publisher can have multiple event in subscriber. this fits well in pattern query but it looks like it outputs as soon as 1 event is matched and there is no way to window or tell the count. here is the execution plan i have came up with that should have matches all mapping but its not working that way, it only outputs 1 event, the first one that matches. can someone please look at this and help me figure out why it is not working? or what would be right way to get this? Thanks Jay Execution Plan: @Plan:name('TestExecutionPlan') define stream publisher (pid string, time string); define stream subscriber (pid string, sid string, time string); @info(name = 'query2') from every( e1=publisher ) -> e2=subscriber[ e2.pid == e1.pid ] select e1.pid, e2.sid, e2.time insert into AlertStream; here is the sample events if you want to try on siddhi-try-it tool publisher=[1,2017-08-15 01:08:30.253] publisher=[2,2017-08-15 02:08:30.253] publisher=[3,2017-08-15 03:08:30.253] subscriber=[1, 12,2017-08-15 21:08:30.253] subscriber=[1, 13,2017-08-15 21:10:30.253] ___ Dev mailing list Dev@wso2.org http://wso2.org/cgi-bin/mailman/listinfo/dev