Hive中对科学计数法表示的字符串的转换
来源:互联网 发布:打印机网络共享软件 编辑:程序博客网 时间:2024/06/06 13:24
Hive中int , float , double这些数值类型在存储大额度数字时,在前端展现上总是使用科学计数法来表示,例如:
hive> select pow(10,8) from dual;
OK
1.0E8
其实无论是普通的表示方式还是科学计数法表示,只是一个习惯问题,结果都是一样的。可是不能理解的是当把数值类型转化成字符串类型以后Hive竟然把数值转换成了科学计数法表示的字符串而非数值本身的字符串,例如:
hive> select cast(pow(10,8) as string) from dual;
OK
1.0E8
这样问题就来了,很对时候业务需求要求数值必须存储为字符串类型,但是如果存储的是一个科学计数法表示的字符串,那就失去了数值本身的含义,例如再想把这个字符串转回数值类型就会出现转换错误:
hive> select cast('1.0E8' as int) from dual;
OK
1
因此,需要有一种方法在把数值类型转换成字符串类型时,强制Hive不要转换成科学计数法表示。
我查找了很多资料没有找到Hive中例如一个参数可以做这个控制。因此只能采取其他策略进行转换。
当我们要转换的数值只有整型而没有小数时,我们可以先把数值类型转换成bigint类型,使用bigint类型存储的数值不会采用科学计数法表示,例如:
hive> select cast(pow(10,8) as bigint) from dual;
OK
100000000
hive> select cast(cast(pow(10,8) as bigint) as string) from dual;
OK
100000000
但是由于bigint只能存储整型,当我们处理浮点数时这个方法就不灵了。
不得已我只能采用字符串解析这种最原始的方法:
以下是我写的将科学计数法表示的字符串转换为普通表示法表示的字符串的转换SQL:
case
then '字符串'
end
例如要处理“1.5602200465E8”这样一个字符串:
hive> select
> case
>
>
>
>
>
>
>
>
>
> end
> from dual;
OK
156022004.65
当然这种方法最好是封装到UDF中,显得更为简洁,代码可读性也更强
- Hive中对科学计数法表示的字符串的转换
- hive对科学计数法字符串的转换
- 转换科学计数法的数值字符串为decimal类型
- 不使用库函数将字符串转为double类型(考虑科学计数法表示的字符串)
- js把科学计数法表示的字符串转化为数值的方法
- js把科学计数法表示的字符串转化为数值的方法
- 在java中,怎样把一个double数转换为字符串时,不用科学计数法表示。
- 在java中,怎样把一个double数转换为字符串时,不用科学计数法表示。
- decima转换科学计数法的数字
- Java科学计数法的转换
- Java中数值较大的double类型转换为字符串时会用科学计数法显示的解决办法
- 科学计数法如何转换成普通的计数方式??
- float double 避开科学计数法表示的手段
- 科学计数法转换成字符串
- js把科学计数法形式的数据转换成非科学计数法的形式
- Oracle ERP 报表:类数字格式字符串数据的前置0被截取和被科学计数法表示
- 科学计数法表示的数值表示为普通的数值形式
- DataTable中包含科学计数法的字段转换为一般显示的方法
- HttpClient简介
- 法国自动化研究所SPArse稀疏编码优化工具包介绍
- C++ - 两数交换, 不引入第三个变量
- 关于int main(int argc,char *argv[])
- Hive中的一种假NULL
- Hive中对科学计数法表示的字符串的转换
- jdbc的事务管理
- java读取字符串中数字
- Hadoop中map数的计算
- image文件图片显示,存储,读取问题
- HDFS bytes read与Map input bytes
- hdu 4740 (一步一步模拟就好了)考查耐心与细心
- Random的假随机
- 如何修改apusic应用服务器的启动内存