esper如何查找流中存在但在streamB中不存在的ID

时间:2013-05-27 21:10:21

标签: esper

问题非常简单:使用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中不存在”的任何建议吗?

1 个答案:

答案 0 :(得分:1)

一种简单的方法是对流进行时间排序,以便在发送事件之前对A和B进行时间戳排序。

或者你可以推迟A这样的查询:

从模式中选择* [每a = streamA - >计时器:间隔(1秒)]为delayed_a 哪里不存在(...其中delayed_a.a.id = b.id)

streamA不需要外部定时窗口。对于外部定时行为,一般使用外部定时器事件。