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 表