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
)
我想做统计,统计的是百分比
我有一个查询,它告诉我来自一个包含多个值 ['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
)