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"。
我是 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"。