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

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

在 hive 中,我必须运行一些算术运算,例如,我想对包含诸如“12345-”之类的数据的该值求和,那么HIVE无法将该值识别为数字(列类型为DECIMAL(10,2))和结果显示NULL为值!需要您如何处理这种情况的建议。

最佳答案

检查最后一个字符,如果它是'-',则使用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

关于hadoop - hive :处理HDFS中存储的数据中的负数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40975312/

10-11 09:05