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 和案例 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;
我有一个 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 和案例 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;