CDH6中Impala3报错UDF ERROR: String to Decimal parse failed

执行impala-shell或者在HUE中执行查询的时候会在对decimal类型做四则运算或聚合操作时出现此错误信息,这个错误只出现在CDH6以上的版本/impala3以上,我们也是在集群升级CDH6之后才遇到这个错误。

UDF ERROR:String to Decimal cast overflowed

UDF ERROR: String to Decimal parse failed

出现这个错误的原因是因为CDH6中impala升级到impala3之后decimal格式做了升级,在官方文档中可以看到区别:

https://docs.cloudera.com/documentation/enterprise/6/6.0/topics/impala_decimal.html

官方也给出了解决方案: SET DECIMAL_V2=FALSE;  这样子就不会报错了,但是这个配置是session级别的,我们得想办法配置成为全局的,以保证所有impala-shell调用的sql脚本无需修改就可以正常运行。

这里我参考官方文档的配置在impala的配置文件~/.impalarc 里加上此配置即可:

https://docs.cloudera.com/documentation/enterprise/6/6.0/topics/impala_shell_options.html

[impala.query_options]
DECIMAL_V2=FALSE

加上这个配置之后,该用户执行impala-shell调用脚本时就不会报UDF ERROR:String to Decimal cast overflowed 这个错误了。

如果有多个用户执行脚本需要在每个用户主目录下新建或修改.impalarc文件加上这个配置。

注意这个配置只解决impala-shell命令执行的sql,并不能解决HUE里的这个问题,原因也是因为此配置是session级别的,且impalarc文件是impala-shell在执行的时候会去检查的配置文件,跟HUE没什么关系。

可以看到impala-shell.py里面先读默认配置文件impalarc,默认配置文件impalarc在impala_shell_config_defaults.py中获取.

在配置文件impala_shell_config_defaults.py中可以看到config_file是'~/.impalarc'。

因此如果在HUE里执行SQL查询的时候如果遇到上面的错误,还是需要在HUE的窗口里先执行一下SET DECIMAL_V2=FALSE;

然后就可以欢乐的玩耍了,只要HUE窗口没有关闭就可以正常使用。


扩展:

在该配置文件.impalarc中:

[impala] 下面的配置为系统配置 即 impala-shell -h 之后的那些参数配置。

[impala.query_options]下面的配置为session配置即set xxx=yyy;这样的配置,会给每个会话生效。

猜你喜欢

转载自blog.csdn.net/wsdc0521/article/details/102863655