java.lang.NullPointerException at org.apache.hadoop.hive.serde2.lazybinary.LazyBinaryHiveDecimal.in
阿新 • • 發佈:2018-12-05
問題是hive的資料型別轉換,decimal無法直接轉化為double,可以嘗試轉換成string,後面hive會自動隱式轉換成對應型別。
Hive在需要的時候將會對numeric型別的資料進行隱式轉換。比如我們對兩個不同資料型別的數字進行比較,假如一個數據型別是INT型,另一個 是SMALLINT型別,那麼SMALLINT型別的資料將會被隱式轉換地轉換為INT型別,這個到底和Java中的一樣;但是我們不能隱式地將一個 INT型別的資料轉換成SMALLINT或TINYINT型別的資料,這將會返回錯誤,除非你使用了CAST操作。
任何整數型別都可以隱式地轉換成一個範圍更大的型別。TINYINT,SMALLINT,INT,BIGINT,FLOAT和STRING都可以隱式 地轉換成DOUBLE;是的你沒看出,STRING也可以隱式地轉換成DOUBLE!但是你要記住,BOOLEAN型別不能轉換為其他任何資料型別!
下標列出了Hive內建的資料型別之間是否可以進行隱式的轉換操作:
注:由於表格比較大,這裡對一些比較長的字串進行縮寫,ts是timestamp的縮寫,bl是boolean的縮寫,sl是smallint的縮寫,dm是decimal的縮寫,vc是varchar的縮寫,ba是binary的縮寫。
bl | tinyint | si | int | bigint | float | double | dm | string | vc | ts | date | ba | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
boolean | true | false | false | false | false | false | false | false | false | false | false | false | false |
tinyint | false | true | true | true | true | true | true | true | true | true | false | false | false |
smallint | false | false | true | true | true | true | true | true | true | true | false | false | false |
int | false | false | false | true | true | true | true | true | true | true | false | false | false |
bigint | false | false | false | false | true | true | true | true | true | true | false | false | false |
float | false | false | false | false | false | true | true | true | true | true | false | false | false |
double | false | false | false | false | false | false | true | true | true | true | false | false | false |
decimal | false | false | false | false | false | false | false | true | true | true | false | false | false |
string | false | false | false | false | false | false | true | true | true | true | false | false | false |
varchar | false | false | false | false | false | false | true | true | true | true | false | false | false |
ts | false | false | false | false | false | false | false | false | true | true | true | false | false |
date | false | false | false | false | false | false | false | false | true | true | false | true | false |
binary | false | false | false | false | false | false | false | false | false | false | false | false | true |