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
)