hive时金额为科学记数法转为普通的数字

博客讨论了在Hive中遇到科学计数法数据的问题,包括字段类型转换尝试(bigint, double, decimal)以及使用正则表达式进行数据处理的方法。作者提出将数字切分为基数和指数并进行乘法运算,以及直接转换字段类型为decimal的解决方案,但遇到了部分数据无法正确导入的问题。总结了处理科学计数法数据的关键步骤和可能的挑战。
摘要由CSDN通过智能技术生成

1.改变入湖时的字段类型

在hive入湖的时候有时候遇到源数据库中科学计数法,如:1.2e+007,1e+006,等在hive中运算不识别,我试过入湖时改变字段的字段类型,有一定效果,我改成bigint,double,decimal,decimal(10,2)类型时显示为整的数据,但是不知道为何有一部分数据进不来,会有漏数的情况。

2.用正则表达式去切分然后相乘

现在的思路1.2e+007 切分成1.2 和 7 然后进行乘方。

select 字段,regexp_extract(字段,'(.*?)(e)',1),cast(regexp_extract(字段,'(e\+)(.*)',2) as int)
from 表

select 字段,regexp_extract(字段,'(.*?)(e)',1),cast(regexp_extract(字段,'(e\+)(.*)',2) as int),
       cast(regexp_extract(字段,'(.*?)(e)',1)*pow(10,cast(regexp_extract(字段,'(e\+)(.*)',2) as int)) as decimal(10,0))
       as 别名
from 表 

3.设置字段类型

用正则表达式做完后我发现直接转格式就可以实现了:

select 字段,cast(字段as decimal(10,0)) ,cast(字段as decimal(10,0)),cast(字段as decimal(10,0))
from 表  

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值