Filter
All the application code here is available from the docs git repository.
The filter builds on the passthrough example and extends the example.trickle by adding a filter
on the field selected. Only if this field is set to true the event will pass.
Environment
It connects to the pipeline example in the example.trickle file using the trickle query language to express the filtering logic.
All other configuration is the same as per the passthrough example, and is elided here for brevity.
Business Logic
select event from in where event.selected into out
Command line testing during logic development
Now let us consider this sample input.
$ cat inputs.txt
{ "hello": "world", "selected": false }
{ "hello": "again", "selected": true }
Deploy the solution into a docker environment
$ docker-compose up
{"hello": "again", "selected": true}
Inject test messages via websocat
Can be installed via cargo install websocat for the lazy/impatient amongst us
$ cat inputs.txt | websocat ws://localhost:4242
...
Discussion
Filters in tremor query ( trickle ) can be any legal predicate expression ( boolean returning
expression or function call ). For example:
Where clause
Events are selected on the inbound event if the numeric field on the inbound event is less than or equal to 10 or greater than or equal to 100.
select event
from in
where event.numeric <= 10 or event.numeric >= 100
into out
Having clause
Events are selected after processing them if the selected field on the outbound event is true.
select event
from in
into out
having event.selected
Where and Having clauses
Events are selected on the inbound event if the numeric field on the inbound event is less than or equal to 10 or
greater than or equal to 100 and after processing them, the selected field on the outbound event is true.
select event
from in
where event.numeric <= 10 or event.numeric >= 100
into out
having event.selected
The where clause has to be located after the from section in a trickle select expression! The where clause is evaluated on the incoming event.
The having clause can be used to filter events, but it has to appear after the into expression and will be evaluated on the resulting produced event prior to passing it on.
The where and having clauses are optional in trickle select query statements.