Esper运行EPL语句出现BigDecimal类型不匹配报错如何解决
报错原因
你遇到的报错核心是Esper默认未将BigDecimal注册为可直接在EPL Schema中使用的简写类型,仅识别int、double、string、Date等内置类型简写,遇到未声明的简写类型时就会抛出该异常。
此外你的代码还存在字段名不匹配的问题:你定义的BarDataEvent Schema中交易量字段名为volume,但插入语句中查询出的交易量别名为tradingVolume,名称不匹配会导致后续数据插入失败。
解决方案
方案1:直接使用全限定类名(无需修改配置,最快生效)
将Schema中所有BigDecimal替换为Java全限定类名java.math.BigDecimal,同时修正字段别名保持和Schema一致,修改后完整代码如下:
create schema BarDataEvent( timestamp Date, openPrice java.math.BigDecimal, highPrice java.math.BigDecimal, lowPrice java.math.BigDecimal, closePrice java.math.BigDecimal, volume double ); insert into BarDataEvent select Tick.lastDateTime as timestamp, first(last) as openPrice, max(last) as highPrice, min(last) as lowPrice, last(last) as closePrice, sum(vol) as volume from Tick.win:time_batch(1 min)
方案2:注册类型别名(适合多次使用BigDecimal的场景)
如果业务中需要频繁使用BigDecimal类型,可以在Esper引擎初始化时注册类型别名,后续就可以直接在EPL中使用BigDecimal作为类型名:
- 代码方式配置示例:
Configuration esperConfig = new Configuration(); // 注册BigDecimal别名 esperConfig.addEventTypeAlias("BigDecimal", java.math.BigDecimal.class); // 使用该配置创建Esper引擎实例即可
- XML配置文件示例:
<esper-configuration> <event-type alias="BigDecimal" class="java.math.BigDecimal"/> </esper-configuration>
配置完成后仅需要修正你原有代码的字段别名不匹配问题即可正常运行。
内容的提问来源于stack exchange,提问作者XL _At_Here_There
相关产品推荐
相关产品推荐

