Stream Join
Provides examples on joining two stream based on a condition.
For more information on other join operations refer the Siddhi query guide.
define stream TemperatureStream
(roomNo string, temperature double);
define stream HumidityStream
(roomNo string, humidity double);
@info(name = 'Equi-join')
from TemperatureStream#window.unique:time(roomNo, 1 min) as t
join HumidityStream#window.unique:time(roomNo, 1 min) as h
on t.roomNo == h.roomNo
select t.roomNo, t.temperature, h.humidity
insert into TemperatureHumidityStream;
@info(name = 'Join-on-temperature')
from TemperatureStream as t
left outer join HumidityStream#window.time(1 min) as h
on t.roomNo == h.roomNo
select t.roomNo, t.temperature, h.humidity
insert into EnrichedTemperatureStream;
|
|
|
|
|
|
|
Join latest |
|
|
|
|
|
Join when events arrive in |
|
When events get matched in |
|
Join Behavior
When events are sent to TemperatureStream stream and HumidityStream stream, following events will get emitted at TemperatureHumidityStream stream via Equi-join query,
and EnrichedTemperatureStream stream via Join-on-temperature query.
| Time | Input to TemperatureStream |
Input to HumidityStream |
Output at TemperatureHumidityStream |
Output at EnrichedTemperatureStream |
|---|---|---|---|---|
| 9:00:00 | ['1001', 18.0] |
- | - | ['1001', 18.0, null] |
| 9:00:10 | - | ['1002', 72.0] |
- | - |
| 9:00:15 | - | ['1002', 73.0] |
- | - |
| 9:00:30 | ['1002', 22.0] |
- | ['1002', 22.0, 73.0] |
['1002', 22.0, 72.0], [ '1002', 22.0, 73.0] |
| 9:00:50 | - | ['1001', 60.0] |
['1001', 18.0, 60.0] |
- |
| 9:01:10 | - | ['1001', 62.0] |
- | - |
| 9:01:20 | ['1001', 17.0] |
- | ['1001', 17.0, 62.0] |
['1001', 17.0, 60.0], [ '1001', 17.0, 62.0] |
| 9:02:10 | ['1002', 23.5] |
- | - | ['1002', 23.5, null] |
