导入JSON至Redshift Super类型列后数值变更的原因咨询
问题原因及事实依据
- 核心原因:Redshift Super类型采用IEEE 754双精度浮点数存储JSON数值,你用到的
1.0000000123456789超出了双精度的精确表示范围,被舍入到最近的可表示值 - 具体细节:
- IEEE 754双精度浮点数的尾数为52位二进制,对应十进制的有效数字上限约为17位。
1.0000000123456789的有效数字从第一个非零数字算起共有18位,无法被双精度浮点数精确表示。 - 这个十进制数转换为双精度二进制时,会自动舍入到最接近的可表示值,也就是
1.0000000123456787,这就是查询结果中数值末尾变化的原因。
- IEEE 754双精度浮点数的尾数为52位二进制,对应十进制的有效数字上限约为17位。
- Redshift的处理逻辑:
Super类型解析JSON插入时,会把数值型JSON值转成双精度浮点数存储,不会保留原始的十进制字符串形式。查询时再将存储的双精度值转回十进制字符串,因此返回的是舍入后的结果,而非原始JSON里的数值。
内容的提问来源于stack exchange,提问作者ezail
相关产品推荐
相关产品推荐

