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 не будет увеличивать значение numEvents и пересчитывать процент. Это означает, что процент Bs будет рассчитываться только в том случае, если приходит B. Что не то, что я хочу. Я хочу, чтобы процент B уменьшался, если входило другое значение, и увеличивался, если входило B.

Как я могу сделать Query 3 таким образом, чтобы независимо от того, получает ли 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)

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