2013-05-27 13 views
1

問題很簡單:使用Esper引擎僅提取2個不同流中不存在的記錄。
ID存在於streamA中,但不在streamB中退出。esper如何查找存在於streamA中的ID但不存在於streamB中的ID

在SQL它應該是這樣的:

SELECT * 
FROM tableA 
WHERE NOT EXISTS (SELECT * 
        FROM tableB 
        WHERE tableA.Id = tableB.Id) 

我已經試過了艾斯波風格,但它不工作:

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_A.Id stream_B.id之前插入比它將回答查詢條件和查詢將無法工作。

有關如何使用Esper來識別「ID存在於streamA中但不在流B中退出」的任何建議?

回答

1

一個簡單的方法是時間順序流,使A和B是在發送事件之前時間戳下令

或者你可以延遲像這樣的查詢:

SELECT * FROM模式[every a = streamA-> timer:interval(1 sec)] as delayed_a where exists(... where delayed_a.a.id = b.id)

不需要外部定時窗口streamA。對於通常使用外部計時器事件的外部定時行爲。

+0

謝謝!你給我的選擇工作就是這樣。 –

相關問題