1

名前付きウィンドウがあるとしましょう:

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

ここTestEventで、RevisionEvent、およびTestEventBaseは、それぞれTestEventDeltaのベースイベントとデルタイベントで定義されTestEventます。ここでの鍵はですFieldA

現在、ウィンドウにベースイベントのないデルタイベントがある場合、Esperはこのデルタイベントをサイレントに破棄しているように見えます。したがって、たとえば、デルタイベントがベースイベントの前に来る場合、デルタは破棄されるため、ウィンドウ内の行の状態はベースイベントのみのようになります。

私の質問は、たとえば、これが発生したときに特別な処理を行うために、ウィンドウに入ることができない場合にデルタイベントをキャッチする方法はありますか?

アプリケーションでメッセージを失わないようにする必要があり、Esperが他のメッセージではなく一部のメッセージを黙って破棄している場合、イベントがウィンドウに入ったことを100%確実にするにはどうすればよいですか?

よろしくお願いします!

4

1 に答える 1

1

別のステートメントを使用して、ベース イベントなしでデルタ イベントを検出できます。つまり、「select * from TestDelta as td where not exists (select * from TestEvent.first:unique(id) where te.id = td.id)」

デルタ イベントは、ベース イベントが常に最初に到着し、デルタがベースをオーバーレイするユース ケース向けに設計されています。そうでない場合は、代わりに名前付きウィンドウとオンマージを使用するか、上記のサブクエリと同様にマージします。

于 2012-10-12T15:39:18.533 に答える