Я изо всех сил пытаюсь понять этот запрос:
from heartbeats#window.time(1 hour) insert expired events into delayedStream;
from every e = heartbeats -> e2 = heartbeats[deviceId == e.deviceId]
or expired = delayedStream[deviceId == e.deviceId]
within 1 hour 10 minutes
select e.deviceId, e2.deviceId as id2, expired.deviceId as id3
insert into tmpStream;
- Первый запрос задерживает все События на 1 час.
- Второй запрос фильтрует все События, произошедшие 1 час назад, и более новых событий не найдено.
Это работает, но я не понимаю этой части:
от каждого e = heartbeats -> e2 = heartbeats [deviceId == e.deviceId] или expired = delayedStream [deviceId == e.deviceId]
Вторая часть запроса (или expired = ...) проверяет, находится ли Событие с данным deviceId в delayedStream. Какова цель первой части и как она сводится к тому, что этот запрос находит устройства, которые не отправляли данные более 1 часа?