hive:处理hdfs中存储的数据中的负数

8fsztsew  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(1154)

我遇到了处理负数值数据的情况。文件(存储在hdfs中)中某些数值的负号位置在右侧(如12345-),理想情况下,负数在左侧表示为负数(如-12345-)。
我无法更改数据,因为此数据是正确的,并且当源系统(sap)使用此数据时,它能够将数据读取为负数。
在配置单元中,我必须运行一些算术操作,例如我要对包含“12345-”之类数据的值求和,然后配置单元无法将此值识别为数字(列类型为decimal(10,2)),结果显示null为值!需要你的建议如何处理这种情况。提前谢谢。

vq8itlhq

vq8itlhq1#

检查最后一个字符,如果是“-”,则使用substr和concat构造正确的值:

select case when substr('12345-',-1,1)='-' then cast(concat('-',substr('12345-',1,length('12345-')-1)) as int) else cast('12345-' as int) end as column_name;
OK
-12345

用列名替换“12345-”

vsaztqbk

vsaztqbk2#

使用以下语法:

CAST(CAST(-1 AS DECIMAL(1,0)) AS
 DECIMAL(10,2))*CAST(regexp_replace(regexp_replace(TRIM(column name),'\\-',''),'-','') as decimal(10,2)),

相关问题