首页 文章

使用两次窗口查询Siddhi CEP

提问于
浏览
1

我试图做一个简单的查询,但两个时间窗口;如果您已经为此产品发送了上个月的广告,那么查询将类似于尝试向过去四个月内访问过网络产品两次以上的用户发送消息 .

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

并会继续吗?

1 回答

  • 1

    您可以执行以下操作:

    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天内每个客户的访问次数,在最后一次查询中,我们使用count> 2过滤这些结果 .

    EDIT:

    由于您只需要在最后一天内发送通知(假设它定义为:当前时间--24小时),您需要发送通知,您可以尝试以下操作:

    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) .

相关问题