Hive:处理存储在HDFS

时间:2016-12-05 13:24:35

标签: hadoop hive integer hdfs negative-number

我有处理负数字数据的情况。文件中某些数值的负号位置(存储在HDFS中)位于右侧(如此12345-),理想情况下负数在左侧表示为负数(如此,-12345)。

我无法更改数据,因为此数据是正确的,当源系统(SAP)使用数据时,它能够将数据读取为负数。

在hive中我必须运行一些算术操作,比如我想要SUM这个包含'12345-'等数据的值,然后HIVE无法将此值识别为数字(列类型为DECIMAL(10,2))并且结果显示NULL为值!需要你的建议如何处理这种情况。谢谢。

2 个答案:

答案 0 :(得分:0)

检查最后一个字符,如果是' - ',则使用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-'替换为您的column_name

答案 1 :(得分:0)

使用以下语法:

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