wso2 - Siddhi App,连接中的“输出速率限制”子句不当行为
问题描述
output every
将子句与表子句一起使用时,我遇到了意外的行为join
。
- 我有一个基本的应用程序,有一个
input
流和 2 个表,它们存储不同的值列表。然后,还有2个查询, - 第一个
query1
将加入table1
,当有匹配时output first every 5 sec
。 - Second
query2
将执行类似的操作,将 jointable2
,并将每 5 秒输出找到的第一个值。 - 这样做的目标是,每 5 秒,当
input
流中有一个值包含在表 1 中时,就会有一个匹配,如果有一个值包含在表 2 中,就会有一个不同的匹配,并且两者查询将保持沉默,直到下一个 5 秒块。
该应用程序如下
@App:name("delays_tables_join")
define stream input(value string);
define stream table_input(value string);
define table table1(value string);
define table table2(value string);
@sink(type='log')
define stream LogStream (value string);
-- fill table1
@info(name='insert table 1')
from table_input[value == '1']
insert into table1;
-- fill table2
@info(name='insert table 2')
from table_input[value == '2']
insert into table2;
-- query input join with table 1, output once every 5 sec
@info(name='query1')
from input join table1 on input.value == table1.value
select input.value
output first every 5 sec
insert into LogStream;
-- query input join with table 2, output once every 5 sec
@info(name='query2')
from input join table2 on input.value == table2.value
select input.value
output first every 5 sec
insert into LogStream;
运行此应用程序时,首先将其发送到
table_input
值1
,并2
填充两个表然后,它开始向输入流重复发送值:
1
,2
,1
,2
,1
,2
...预计
LogStream
每 5 秒有 2 个值,第一次出现1
value ,第一次出现 value2
。但是相反,只有第一次出现的 value
1
一直出现,而不是 value2
[2020-04-02_18-55-16_498] INFO {io.siddhi.core.stream.output.sink.LogSink} - delays_tables_join : LogStream : Event{timestamp=1585846516098, data=[1], isExpired=false}
[2020-04-02_18-55-21_508] INFO {io.siddhi.core.stream.output.sink.LogSink} - delays_tables_join : LogStream : Event{timestamp=1585846521098, data=[1], isExpired=false}
请注意,当不涉及表连接时,两个查询都按预期工作。没有连接的例子:
@App:name("delays")
define stream Input(value string);
@sink(type='log')
define stream LogStream (value string);
@info(name='query1')
from Input[value == '1']
select value
output first every 5 sec
insert into LogStream;
@info(name='query2')
from Input[value == '2']
select value
output first every 5 sec
insert into LogStream;
这将产生以下输出:
[2020-04-02_18-53-50_305] INFO {io.siddhi.core.stream.output.sink.LogSink} - delays : LogStream : Event{timestamp=1585846430304, data=[1], isExpired=false}
[2020-04-02_18-53-50_706] INFO {io.siddhi.core.stream.output.sink.LogSink} - delays : LogStream : Event{timestamp=1585846430305, data=[2], isExpired=false}
[2020-04-02_18-53-55_312] INFO {io.siddhi.core.stream.output.sink.LogSink} - delays : LogStream : Event{timestamp=1585846438305, data=[1], isExpired=false}
[2020-04-02_18-53-56_114] INFO {io.siddhi.core.stream.output.sink.LogSink} - delays : LogStream : Event{timestamp=1585846439305, data=[2], isExpired=false}
.
我想知道这种行为是否是预期的,或者应用程序的设计中是否存在任何错误。
非常感谢!
解决方案
通过在插入行中将table1更改为table2来修复“插入表 2”查询,我能够获得“无连接”中的结果
-- fill table2
@info(name='insert table 2')
from table_input[value == '2']
insert into table1;
推荐阅读
- amazon-athena - 更改 athena 表的位置时,分区位置是否会自动更改?
- ios - 如何根据数据制作具有一定百分比的自定义进度条
- c# - 流畅的验证失败后如何调用方法
- javascript - 过滤值数组并将它们分组
- c - 如何在没有 valgrind 错误的情况下调用 2D 数组?
- visual-studio-2017 - Vs2017 Schema Compare 不检测存在的更改(仅在某些机器上)
- ios - 如何在 iOS swift4 中进行名字验证?
- azure-devops - 如何使用 Azure DevOps 分析视图查询当前迭代中的项目?
- c++ - 在 cpp 文件中使用内联命名空间中的类型在 MSVS 中不起作用
- typescript - 验证 FormGroup 上是否存在元素 - 打字稿