Hive存储1.00E+07、-1.00E+08这类数值应使用什么数据类型?
Hive存储科学计数法数值的正确类型选择
为什么bigint存储会返回null
bigint属于整数类型,仅支持解析常规整数格式的输入,无法识别科学计数法格式的字符串/数值,因此转换失败时会直接返回null。
可选的合适类型
你可以根据自身使用场景选择以下类型:
- 如果仅需要保留原始存储格式,不需要对该字段做数值计算、聚合等操作,直接使用
STRING类型即可,完全不会出现数据丢失或转换失败的问题。 - 如果需要对该字段做数值类操作,优先选择
DOUBLE类型:
DOUBLE是双精度浮点类型,原生支持科学计数法格式的数值解析,你提到的1.00E+07、-1.00E+08这类数值都在DOUBLE的有效精度范围内,存储和计算效率都很高,不会出现转换为null的问题。 - 如果场景对精度要求极高(如金融计算),担心浮点类型的精度损失,可以选择
DECIMAL(precision, scale)类型,写入时配合cast(你的字段 as DECIMAL(对应精度, 对应小数位))语法做显式转换即可。
测试示例
-- 建表使用DOUBLE类型存储科学计数法数值 CREATE TABLE scientific_num_test ( value DOUBLE ); -- 插入测试数据 INSERT INTO scientific_num_test VALUES (1.00E+07), (-1.00E+08); -- 查询验证,数据可正常返回,不会为null SELECT * FROM scientific_num_test;
内容的提问来源于stack exchange,提问作者punam。
相关产品推荐
相关产品推荐

