Esper-查询结果中属性顺序错误

Esper-Wrong sequence of attributes in query results

我是 Esper 的新手,我正在研究 Storm-Esper collaboration.Through 我的主要 class,我向包含 esper 的螺栓发送查询,而 esper-bolt 发送包含的元组打印机的结果 bolt.My 问题是,尽管查询结果对于值是正确的,属性值不在正确的 order.For 示例中,我有一个查询从中选择属性一个飞行员的 table: name,surname,airline 和我应该得​​到相同的结果 order.However 我 get:name,airline,surname.I 已经尝试了所有关于 group by 和 order by.I 假设在创建包含属性的事件地图时一定是 Esper 的错-values.I 粘贴主要 class 代码和 esper bolt 代码,其中地图是 processed.Any idea为什么会发生这种情况是最受欢迎的!

**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);

结果应该是:source: Esper-Print:2, stream: CombinedEvent, id: {}, [John, Snow, Lufthansa] 相反,我 get:source: Esper-Print:2, stream: CombinedEvent, id: {}, [John, Lufthansa, Snow]

P.S.The toTuple 函数只是通过 values 字符串列表获取属性的值,并将它们放入一个元组中,该元组被发送到 printerbolt.In espebolt 代码在注释中有一些打印,这帮助我看到问题出在 esper 内部创建的地图中。

默认情况下 Esper 生成地图事件。这可以在设置配置或使用注释时更改为对象数组事件。地图事件使用 "HashMap" 而不是 "LinkedHashMap"。 "HashMap" 在迭代键值对时没有排序,但占用的内存要少得多。对象数组是有序的。对于 Map 事件的有序访问,您可以从 returns 您按顺序输入 属性 名称的语句中获得 "EventType"。