SiddhiQL условие сложного фильтра на столе - PullRequest
0 голосов
/ 10 января 2020

У меня есть таблица T (строка имени, строка id), и я получаю события из потока X (строка имени, строка id). Когда я получаю событие, если имя не существует в таблице T, я хочу вставить имя и идентификатор в таблицу и отправить это событие в выходной поток. Если имя существует в таблице, я хочу отправить это событие в выходной поток, только если идентификатор против имени в таблице совпадает с идентификатором, полученным в событии. Например -

Table Data
name     |id
qwerty   |12345

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

В приведенном выше сценарии я хочу проигнорировать событие 1, отправить событие 2 в выходной поток и добавить имя и идентификатор события 3 в таблицу, а затем отправить его в выходной поток.

Возможно ли это в siddhiql?

1 Ответ

1 голос
/ 11 января 2020

Вы можете использовать siddhi объединения таблиц особенно левое внешнее объединение с именем в качестве условия и отфильтровывать другие случаи по пути

  1. Внутренние объединения для случаев 1 и 2, Это вернет событие, только если имя и идентификатор совпадают.
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;

...