Запрос с Сиддхи CEP, используя два раза окна

Я пытаюсь сделать простой запрос, но с двумя временными окнами; запрос будет выглядеть как попытка отправить сообщение пользователям, которые посещали веб-продукт более двух раз за последние четыре месяца, при условии, что вы уже отправили в прошлом месяце рекламу этого продукта.

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 ответ

Решение

Вы можете сделать что-то вроде следующего:

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 часа), вы можете попробовать выполнить следующее:

 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 день) отслеживает, сколько предупреждений ('hitForClientPerDay') было сгенерировано за последние 24 часа, последний запрос отправляет рекламу, только если в течение этого периода их не было (обратите внимание, что hitForClientPerDay будет 1, когда событие наступит, поскольку текущее событие также считается для count(), поэтому мы проверяем его как < 2).

Другие вопросы по тегам