天天看點

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中Impala3報錯UDF ERROR: String to Decimal parse failed

出現這個錯誤的原因是因為CDH6中impala更新到impala3之後decimal格式做了更新,在官方文檔中可以看到差別:

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

CDH6中Impala3報錯UDF ERROR: String to Decimal parse failed

官方也給出了解決方案: 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
           
CDH6中Impala3報錯UDF ERROR: String to Decimal parse failed

加上這個配置之後,該使用者執行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中擷取.

CDH6中Impala3報錯UDF ERROR: String to Decimal parse failed

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

CDH6中Impala3報錯UDF ERROR: String to Decimal parse failed

是以如果在HUE裡執行SQL查詢的時候如果遇到上面的錯誤,還是需要在HUE的視窗裡先執行一下SET DECIMAL_V2=FALSE;

然後就可以歡樂的玩耍了,隻要HUE視窗沒有關閉就可以正常使用。

擴充:

在該配置檔案.impalarc中:

[impala] 下面的配置為系統配置 即 impala-shell -h 之後的那些參數配置。

[impala.query_options]下面的配置為session配置即set xxx=yyy;這樣的配置,會給每個會話生效。

繼續閱讀