2017-08-09 23 views
0

私はEsperを初めて使用しています。私はStorm-Esperコラボレーションに取り組んでいます。私のメインクラスを介して、esperを含むボルトに質問を送ります。結果はプリンタのボルトに含まれています。私の問題は、クエリの結果は値は正しいものの、属性値が正しい順序ではないことです。たとえば、私はパイロットのテーブルから属性を選択するクエリを持っています:名前、姓、航空会社と私は同じ順序で結果を持っているはずです。私は得る:名前、航空会社、姓。私はグループと注文に関するすべてを試しました。私はイベントの作成時にEsperの失敗でなければならないマップには属性値が含まれています。メインクラスコードと地図が処理される場所のエスパーボルトコードを貼り付けます。なぜそのようなことが起こっているのが大歓迎です!Esper - クエリ結果の属性の順序が正しくありません

**mainclass** 
.addStatements(("insert into pilotStream " + 
       "select * " + 
       "from Log.win:time(120 second) A ")) 
.addStatements(("insert into employeeStream " + 
       "select * " + 
       "from Emp.win:time(120 second) A ")) 
.addStatements(("insert into CombinedEvent "+ 
       "select tick.pilotName as p_name , " + 
       "tick.pilotSurname as p_surname , " + 
       "tick.airline as p_airline " + 
       "from pilotStream.win:time(120 second) as tick, " + 
       "employeeStream.win:time(120 second) as rom "+ 
       "where tick.airline = rom.employeeAirline "+ 
      )) 
**espebolt** 
Map<String, Object> emap = (Map<String, Object>) newEvent.getUnderlying(); 
        String Event_name = newEvent.getEventType().getName(); 
        //System.out.println(Event_name); 

        for (Map.Entry<String, Object> entry : emap.entrySet()) { 

        // String key = entry.getKey(); 
         String val = String.valueOf(entry.getValue()) ; 
         //System.out.println(key+" :"+val); 
         //System.out.println(val); 

         values.add(val); 
        } 

        collector.emit(Event_name, toTuple(newEvent, values, false)); 
        values.removeAll(values); 

結果がなければならない:ソース:エスパー印刷:2、ストリーム:CombinedEvent、ID:{}、[ジョン、雪、ルフトハンザ] その代わりに、私は得る:ソース:エスパー-PRINT:2、ストリーム:CombinedEvent、ID:{}、[ジョン、ルフトハンザ、雪]

PSThe toTuple機能は、単に文字列のリストを属性の値を取得し、printerboltに放出されるタプルにそれらを置きます。espeboltコードには、問題がesperが内部的に作成したマップ上にあることを確認するのに役立つコメントにいくつかの印刷があります。

答えて

0

デフォルトでは、EsperはMapイベントを生成します。これは、構成を設定するとき、または注釈を使用して、オブジェクト配列イベントに変更できます。マップイベントは "LinkedHashMap"ではなく "HashMap"を使用します。 「HashMap」は、キーと値のペアを反復するときには順序付けられませんが、メモリははるかに少なくなります。オブジェクト配列が順序付けられます。 Mapイベントへの順序付けられたアクセスには、プロパティ名を順番に返すステートメントから取得できる「EventType」があります。

関連する問題