wso2 cep Siddhiql 合并来自 2 个流的数据

wso2 cep Siddhiql merge data from 2 streams

我想做统计,统计的是百分比

我有一个查询,它告诉我来自一个包含多个值 ['R'、'B'、'A'、'C'] 的流的事件数。我想按百分比计算 stream1 中有多少个 B。

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并重新计算百分比。这意味着只有当 B 进来时才会计算 Bs 百分比。这不是我想要的。如果输入不同的值,我希望 B 百分比降低。如果 B 出现,我希望百分比增加。

如何使 Query3 以 event_num 或 v_num 是否收到新事件来计算百分比?

执行计划如下:

@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