QuantumLeap处理Orion Context Broker数据时浮点值截断问题咨询
问题成因说明
这个问题是QuantumLeap v0.5版本的已知类型映射bug,具体成因如下:
- 类型判定逻辑优先级错误:该版本没有严格遵循「优先以NGSI属性声明的type字段为映射依据」的规则,额外加入了运行时数值的类型推导逻辑。当首次收到的属性值在JSON解析后被识别为Python整型(包括0、1.0、2.0这类小数部分为0、被JSON解析器自动转换为整型的数值)时,类型推导模块会直接判定该属性为整型,建表时就会在CrateDB中创建INTEGER类型的列,后续所有写入该列的浮点数都会被强制截断为整数存储。
- JSON无严格数值类型区分放大了问题:JSON语法本身没有独立的整型、浮点型区分,IoT Agent上报的
Number类型数值如果小数部分为0,会被接收端的JSON解析器自动转换为整型值,刚好触发了上述逻辑漏洞,导致NGSI声明的Number类型被运行时的数值类型覆盖。
这个bug在QuantumLeap v0.6及更高版本已经被官方修复,修复逻辑为移除运行时数值类型推导步骤,完全以NGSI属性声明的type字段作为CrateDB列类型的映射依据。如果暂时无法升级版本,可临时通过IoT Agent配置强制所有Number类型数值上报时保留固定小数位,避免出现小数部分为0的数值触发bug。
内容的提问来源于stack exchange,提问作者Green1234
相关产品推荐
相关产品推荐

