1. 程式人生 > >java.lang.NullPointerException at org.apache.hadoop.hive.serde2.lazybinary.LazyBinaryHiveDecimal.in

java.lang.NullPointerException at org.apache.hadoop.hive.serde2.lazybinary.LazyBinaryHiveDecimal.in

問題是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