2013-02-05 16 views
1

我想創建一個EPL聲明,將顯示訂單是否成功與否。計算布爾結果顯示一對事件是否匹配或不艾斯波

聲明應與付款購買,根據購買的ID。結果應該包含購買和一個布爾值,表明購買是否與付款匹配的ID。

我有下面的語句時,成功匹配時返回true。不過,我也想在購買退出30秒的時間窗口沒有被匹配到支付返回一個錯誤。

SELECT Purchase.purchaseId AS purchaseId, true AS successful 
FROM Purchase.win:time(30), Payment.win:time(30) 
WHERE Purchase.purchaseId = Payment.purchaseId 

如果事件進來的順序並不重要,這也會很好。例如,如果在購買之前付款。

回答

1

使用外連接代替。

事情是這樣的:

SELECT Purchase.purchaseId AS purchaseId, s2 is not null as successfull 
FROM Purchase.win:time(30) as s1 left outer join Payment.win:time(30) as s2 
on s1.purchaseId = s2.purchaseId 
+0

非常感謝您的快速反應。這幾乎做我想要的。但是,據我所知,每次購買都會有兩個輸出事件:一次是購買時,另一次是與付款相匹配。有沒有辦法阻止它產生第一個輸出事件? – robingrindrod

+0

是的,有兩個流。您無法停止流,但您可以將UpdateListener/Subscriber註冊到其中一個。 –