首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用两次窗口查询Siddhi CEP

用两次窗口查询Siddhi CEP
EN

Stack Overflow用户
提问于 2015-04-23 13:53:08
回答 1查看 235关注 0票数 1

我试着做一个简单的查询,但是有两个窗口;如果你已经为这个产品发送了上个月的广告,那么这个查询就像试图向在过去四个月中访问过两次网络产品的用户发送信息一样。

代码语言:javascript
复制
define stream webvisit (idClient string, idProduct string, chanel string)

from webvisit select idCliente, idProducto, canal,sum(1) as visits group by idCliente insert into visits

from visits[idProduct=='Fondos' and visits > 2]#window.time(4) insert into alert

还会继续吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-28 12:43:18

您可以这样做:

代码语言:javascript
复制
define stream webvisit (idClient string, idProduct string, chanel string)

from visits[productId =='Fondos’]#window.time(4 days)
select idClient, idProduct, chanel, count(idClient) as visitCount
group by idClient
insert into visits;


from visits[visitCount > 2]
select *
insert into resultStream; 

在第二个查询中,我们获得最后4天内每个客户的访问次数,而在最后一个查询中,我们过滤那些计数> 2的结果。

编辑:

由于只有在最后一天内未发送通知(假设通知定义为:当前时间- 24小时)时,才需要发送通知,因此可以尝试如下:

代码语言:javascript
复制
 define stream webvisit (idClient string, idProduct string, chanel string);

 from webvisit[idProduct == 'Fondos']#window.time(4 days) 
 select idClient, idProduct, chanel, count(idClient) as visitCount 
 group by idClient insert into visits for current-events; 

 from visits[visitCount > 2]#window.time(1 day) 
 select idClient, idProduct, chanel, count(idClient) as hitsForClientPerDay 
 insert into tempStream;

 from tempStream[hitsForClientPerDay < 2] 
 select idClient, idProduct, chanel, 'your custom message here' as advertisement 
 insert into advertisementStream;

第二个(1天窗口)查询跟踪在过去24小时内生成了多少警报(' hitsForClientPerDay '),最后一个查询只有在这段时间内没有任何警报时才发送广告(注意,当事件发生时,hitsForClientPerDay将为1,因为当前事件也考虑了count(),因此我们将其检查为<2)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29825595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档