HIVE科学计数法

1.hive 中数值类型和字符串类型string运算

hive中数值类型可以和和字符串类型string运算,其中字符串为纯数字类型,都转为了浮点类型double.若字符串不为纯数字类型,计算结果则为NULL.
1、数值和数值 --> int
在这里插入图片描述
2、数值和数值型字符
在这里插入图片描述

3、数值和非纯数字
select '3' * '2' 6.0

2.hive中使用联结union all

union all中的子查询要求相同的列数,对应字段类型相同或可以隐式转化为同一种类型

3.hive中int double float string出现科学计数法

hive中int , float , double这些数值类型在存储大额度数字时,在前端展现上总是使用科学计数法来表示,其实无论是普通的表示方式还是科学计数法表示,只是一个习惯问题,结果都是一样的。
可是不能理解的是当把数值类型转化成字符串类型以后hive竟然把数值转换成了科学计数法表示的字符串而非数值本身的字符串
处理方法参考下面链接,整数直接先转成bigint,若是小数需要特殊处理
参考1-hive中科学计数法

【坑】若是(1)-(3)正好同时出现,一步小心就会有有问题
有一张表create table test_table(bignumstr string)
(1)单独执行下面sql语句
select 123456789101112; 123456789101112
select 123456789101112.0; 1.23456789101112E14 --或 123456789101112.0
select 123456789101111 union all select 123456789101112.0; 1.23456789101111E14 1.23456789101112E14 – 或 123456789101111.0 123456789101112.0
(2)单独insert
insert into table test_table select 123456789101111; select * table test_table; 123456789101112
insert into table test_table select 123456789101112.0; select * table test_table; 1.23456789101112E14
(3)union all
insert overwrite table test_hjy select 123456789101111 union all select 123456789101112.0; select * table test_table; 1.23456789101111E14 1.23456789101112E14
(4)即使第一个为string
select cast(123456789101111 as string) union all select 123456789101112.0; 1.23456789101111E14 1.23456789101112E14 – 或 123456789101111.0 123456789101112.0
insert overwrite table test_hjy select cast(123456789101111 as string) union all select 123456789101112.0; select * table test_table; 1.23456789101111E14 1.23456789101112E14

insert overwrite table test_hjy select cast(123456789101111 as string) union all select 1 * ‘123456789101112’; select * table test_table; 1.23456789101111E14 1.23456789101112E14
原因在于hive在联结union all时,可以进行隐式转换,先都转换为同一种类型,string可以转换为double,见参考2.

参考2:https://blog.csdn.net/liangzelei/article/details/80102909

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值