问题非常简单:使用Esper引擎从2个不同的流中仅提取不存在的记录 ID存在于streamA中,但NOTBITS存在于streamB中。
在SQL中它看起来像这样:
SELECT *
FROM tableA
WHERE NOT EXISTS (SELECT *
FROM tableB
WHERE tableA.Id = tableB.Id)
我已经尝试过Esper风格,但它不起作用:
SELECT *
FROM streamA.win:ext_timed(timestamp, 5 seconds) as stream_A
WHERE NOT EXSITS
(SELECT stream_B.Id
FROM streamB.win:ext_timed(timestamp, 5 seconds) as stream_B
WHERE stream_A.Id = stream_B.Id)
遗憾的是,如果在stream_B.id之前插入stream_A.Id,它将回答查询条件并且查询将无效。
有关如何使用Esper识别“在streamA中存在ID但在streamB中不存在”的任何建议吗?
答案 0 :(得分:1)
一种简单的方法是对流进行时间排序,以便在发送事件之前对A和B进行时间戳排序。
或者你可以推迟A这样的查询:
从模式中选择* [每a = streamA - >计时器:间隔(1秒)]为delayed_a 哪里不存在(...其中delayed_a.a.id = b.id)
streamA不需要外部定时窗口。对于外部定时行为,一般使用外部定时器事件。