2017-02-03 2 views
1

Я хочу сделать статистику, и статистика в процентах.wso2 cep Siddhiql объединить данные из 2 потоков

У меня есть запрос, который сообщает мне количество событий, происходящих из одного потока, который содержит несколько значений ['R', 'B', 'A', 'C']. И я хочу подсчитать, сколько Bs есть в stream1 в процентах.

Количество событий в stream1

@info(name='Query 1') 
from stream1 
select count() as numEvents 
insert into event_num; 

Количество событий, которые типа B

@info(name='Query 2') 
from stream1[value == 'B'] 
select count() as numBs 
insert into b_num; 

Количество Процент:

@info(name='Query 3') 
from every e1=event_num,e2=b_num 
select (e2.numBs*100)/e1.numEvents as bpercent 
insert into b_percent; 

если есть значение, которое не B , то запрос 3 не будет увеличивать числовые значения и пересчитывать процент. Это означает, что процент Bs будет вычисляться только в том случае, если приходит B. Это не то, что я хочу. Я хочу, чтобы процент B уменьшался, если возникает другое значение и увеличивается, если B входит.

Как я могу сделать Query3 таким образом, чтобы независимо от того, будет ли event_num или будет ли v_num получать новое событие, вычисляет процент?

ответ

1

Как насчет следующего плана исполнения:

@IndexBy('dummyId') 
define table counterTable (dummyId int, numBs long, numAll long); 

define stream stream1 (value string); 

@info(name='counting bValues') 
from stream1[value == 'B'] 
select 1 as dummyId, count() as numBs 
update counterTable 
    on counterTable.dummyId == dummyId; 

@info(name='counting allValues') 
from stream1 
select 1 as dummyId, count() as numAll 
update counterTable 
    on counterTable.dummyId == dummyId; 

@info(name='processing allValues') 
from stream1 JOIN counterTable 
select (counterTable.numBs * 100)/counterTable.numAll as percentage 
insert into statStream; 

Здесь

  • для всех и каждого события, numAll счетчик будет увеличиваться.
  • если B -оцененное событие наступает, то счет numB будет засчитан.

  • расчет процентов будет производиться для всех и каждого прихода события (независимо от value)

+0

с этим кодом я не получаю никакого результата. Я считаю, что причина в том, что я не могу обновить таблицу на основе значения (dummyId), которое еще не существует в нем. Какие изменения мне нужно сделать? Вставить переписать? – JoaoFilipeClementeMartins

+0

Эй, я закончил тем, что вставлял значения в таблицу событий, когда счетчик событий потока() == 1. он работает сейчас. – JoaoFilipeClementeMartins

Смежные вопросы