wso2 cep Siddhiql объединяет данные из 2 потоков

Я хочу вести статистику, и статистика в процентах.

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

Количество событий в потоке1

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

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


person JoaoFilipeClementeMartins    schedule 03.02.2017    source источник


Ответы (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)

person Dilini    schedule 04.02.2017
comment
с этим кодом я не получаю никакого результата. Я считаю, что причина в том, что я не могу обновить таблицу на основе значения (dummyId), которого в ней еще нет. Какие изменения мне нужно сделать? Вставить перезаписать? - person JoaoFilipeClementeMartins; 06.02.2017
comment
Эй, я закончил тем, что вставил значения в таблицу событий, когда количество событий потока () == 1. теперь это работает. - person JoaoFilipeClementeMartins; 06.02.2017