Hive:处理存储在 HDFS 中的数据中的负数

Hive: handle negative number in data stored in HDFS

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

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

在 hive 中我必须 运行 一些算术操作,比如说我想要 SUM 这个包含数据如'12345-'的值,然后 HIVE 无法将这个值识别为数字(列类型是 DECIMAL (10,2)) 结果显示 NULL 作为值!需要您的建议如何提前处理此 situation.Thanks。

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

使用这个语法:

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