2012-10-12 17 views
1

比方說,我有一個名爲窗口:艾斯波 - 如果沒有基本事件在數據窗口中存在抓增量事件

CREATE WINDOW TestWindow.std:unique(FieldA) AS SELECT * FROM TestEvent; 

TestEvent是RevisionEvent,並TestEventBaseTestEventDelta在底座和增量事件被定義分別爲TestEvent。這裏的關鍵是FieldA

當前,如果在窗口中沒有基礎事件的增量事件,Esper會默默地放棄這個增量事件。因此,例如,如果Delta事件發生在基本事件之前,那麼窗口中的行狀態將僅顯示爲基本事件,因爲delta會被丟棄。

我的問題是,如果無法進入窗口以進行特殊處理(例如發生這種情況),是否有辦法對CAT事件進行檢測?

如果我的應用程序要求我不會丟失消息,Esper會默默地放棄一些而不是其他的,我怎麼能100%確定事件進入窗口?

在此先感謝您的幫助!

回答

1

您可以使用單獨的語句檢測沒有基本事件的delta事件,即 「select * from TestDelta as td where not exists(select * from TestEvent.first:unique(id)where te.id = td .id)「

Delta事件設計用於基本事件始終首先到達並且增量覆蓋基數的用例。如果不是這種情況,可以使用命名窗口並進行合併,或者類似於上面的子查詢進行合併。

+0

這個解決方案需要Esper在這個窗口中存儲一個事件來進行比較,但是,是的?如果有數百萬條消息通過,這可能會相當耗費資源。 – Jon