hive下nvl使用注意事项总结

840 阅读1分钟
CAST(NVL(T1.column,0) AS DECIMAL(20,2)) AS `预算金额`  --SQL1

nvl(表达式1,表达式2),其中表达式1与表达式2应为同一类型数据,按照上面SQL编辑会因为字段类型不一致导致报错,如数据存在null时,表达式1为double类型能够正常反馈结果,为decimal类型则会报错。所以修改脚本如下:

CAST(NVL(T1.column,cast(0 as decimal (36,18))) AS DECIMAL(20,2)) AS `实际发生额`  --SQL2

问题描述:脚本每月执行一次,在8月份正常运行的脚本,在9月份执行时报错。

结论:

1.数据表T1在9月25日重建过,原来字段类型为double的改为decimal(36,18)。经测试,将decimal改回为double,SQL脚本能够正常运行;

2.从当前就该问题测试情况来看,当double类型数据时可用nvl函数,当decimal类型数据时nvl(表达式1,表达式2)下表达式2需要cast。