0

Esper (イベント処理エンジン) を使用しています。EPL クエリは次のとおりです。

select * from Event.ext:time_order(timestamp_event, 10000 minutes) where duration > 10

ただし、出力は「timestamp_event」によって順序付けられていません。

id int = 1, timestamp_event= 1412686800000, duration = 30
id int = 4, timestamp_event= 1412685900000, duration = 70
id int = 2, timestamp_event= 1412688600000, duration = 45
id int = 3, timestamp_event= 1412689500000, duration = 60
id int = 5, timestamp_event= 1412636400000, duration = 15

「time_order(timestamp_event, 10000 minutes)」命令が機能しないのはなぜですか?

問題は Esper の構成にあると思います。簡単なクエリを考えてみましょう。

select * from Event.win:time(10 sec) order by id_event

これは、UpdateListener の「upate」メソッドのコードです。

 public void update(EventBean[] newEvents, EventBean[] oldEvents) {
     EventBean event = newEvents[0];
     System.out.println("id int = " + event.get("id_event") + ", timestamp_event = " +  ((Long)event.get("timestamp_event")).toString());

しかし、出力は「id_event」によって順序付けられていません!

id event = 1, timestamp_event = 1412686800000
id event = 4, timestamp_event = 1412687700000
id event = 2, timestamp_event = 1412687100000
id event = 3, timestamp_event = 1412687400000
id event = 5, timestamp_event = 1412688000000

「order by」命令も機能しないようですが、どうすれば可能ですか?

4

2 に答える 2

0

ある種の時間または長さの制約を定義する必要があります。あなたのステートメントは、すべての入力イベントを time_order ウィンドウに返すだけです。

たとえば、次のようなステートメントでは、すべてのイベントが 1 分ごとに正しい順序で表示されます。

select * from Event.ext:time_order(timestamp_event, 10000 minutes)
where duration > 10 output snapshot every 1 minute

または、データ ウィンドウを定義して、次のようにイベントを挿入することもできます。

create window OrderedEvents.ext:time_order(timestamp_event, 10000 minutes) as select * from Event;
insert into OrderedEvents select * from Event;

これに対してアドホック クエリを使用すると、正しい順序でイベントが返されます (ただし、アドホック クエリにwin:time(10000 minutes)および を追加しても同じ結果が得られます)。order by timestamp_event

于 2014-10-13T09:33:27.233 に答える