Hive转换NULL指针异常

时间:2017-10-05 11:27:10

标签: hive

我在源系统中有值,其中任何负十进制值存储为10.35-(值后减号)

当我想存储这个配置单元时,我希望我希望负号在-10.35之前。

CASE WHEN substring(trim(colName), -1) = '-' THEN
abs(regexp_replace(colName, '[^0-9.]', ''))*-1 ELSE 
abs(regexp_replace(colName, '[^0-9.]', '')) END

上述转换工作正常,但如果列包含空值或空值,则抛出NULL指针异常。

如何处理此异常?

1 个答案:

答案 0 :(得分:0)

你不需要abs()函数:

select CASE WHEN trim('10.35-') rlike('-$') 
                THEN regexp_replace('10.35-', '[^0-9.]', '')*-1 
                ELSE regexp_replace('10.35-', '[^0-9.]', '') 
        END

返回-10.35

如果值为空,则返回'' - 空值。如果在这种情况下需要null,请使用cast(作为double):

select CASE WHEN '' rlike('-$') 
                THEN regexp_replace('', '[^0-9.]', '') *-1 
            ELSE cast(regexp_replace('', '[^0-9.]', '') as double) 
        END 

返回null

但是如果你想首先使用abs()然后使用cast(as double),它会将空字符串转换为null,而abs将无异常地返回null

select abs(cast ('' as double))

返回null