table 上的 SiddhiQL 复杂过滤条件

SiddhiQL complex filter condition on table

我有一个 table T(name string,id string) 并且我从流 X(name string,id string) 接收事件。 当我收到一个事件时,如果 table T 中不存在名称,我想将名称和 ID 插入 table 并将该事件发送到输出流。如果名称存在于 table 中,我想仅当 table 中名称的 ID 与事件中收到的 ID 匹配时才将该事件发送到输出流。 例如 -

Table Data
name     |id
qwerty   |12345

Event 1 = {qwerty,123}
Event 2 = {qwerty,12345}
Event 3 = {asdf,12}

在上面的场景中,我想忽略事件 1,将事件 2 发送到输出流并在 table 中添加事件 3 名称和 ID,然后将其发送到输出流。

这在 siddhiql 中可行吗?

您可以使用 siddhi table joins 尤其是以名称为条件的左外连接,并在此过程中过滤掉其他情况

  1. 案例 1 和案例 2 的内部联接,如果名称和 ID 匹配,这只会 return 事件。
from XStream left outer join ATable 
  on XStream.name == ATable.name 
select Xstream.name, XStream.id, ATable.name as tableName, ATable.id as tableId 
insert into OutputStream;

from Outputstream[tableName is null] 
select name, id 
insert into ATable;

-- Here if the table name is not null it will be equal to XStream.name based on the first query
from Outputstream[not(tableName is null) and (tableId == id)] 
select name, id 
insert into FilteredStream;