1. 程式人生 > >hive數據類型轉換、字符串函數、條件判斷

hive數據類型轉換、字符串函數、條件判斷

string decimal tails clas sele 我們 浮點 ngs ble

http://blog.csdn.net/yimingsilence/article/details/70057638

數據類型轉換

同Java語言一樣,Hive也包括 隱式轉換(implicit conversions)和顯式轉換(explicitly conversions)。
  Hive在需要的時候將會對numeric類型的數據進行隱式轉換。比如我們對兩個不同數據類型的數字進行比較,假如一個數據類型是INT型,另一個 是SMALLINT類型,那麽SMALLINT類型的數據將會被隱式轉換地轉換為INT類型,這個到底和Java中的一樣;但是我們不能隱式地將一個 INT類型的數據轉換成SMALLINT或TINYINT類型的數據,這將會返回錯誤,除非你使用了CAST操作。

  任何整數類型都可以隱式地轉換成一個範圍更大的類型。TINYINT,SMALLINT,INT,BIGINT,FLOAT和STRING都可以隱式 地轉換成DOUBLE;是的你沒看出,STRING也可以隱式地轉換成DOUBLE!但是你要記住,BOOLEAN類型不能轉換為其他任何數據類型!

  下標列出了Hive內置的數據類型之間是否可以進行隱式的轉換操作:

bltinyintsiintbigintfloatdoubledmstringvctsdateba
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

  

  註:由於表格比較大,這裏對一些比較長的字符串進行縮寫,ts是timestamp的縮寫,bl是boolean的縮寫,sl是smallint的縮寫,dm是decimal的縮寫,vc是varchar的縮寫,ba是binary的縮寫。

 我們可以用CAST來顯式的將一個類型的數據轉換成另一個數據類型。如何使用?CAST的語法為cast(value AS TYPE)。舉個例子:假如我們一個員工表employees,其中有name、salary等字段;salary是字符串類型的。有如下的查詢:

1 SELECT name, salary FROM employees
2 WHERE cast(salary AS FLOAT) <</code> 100000.0;

  這樣salary將會顯示的轉換成float。如果salary是不能轉換成float,這時候cast將會返回NULL!
  對cast有一下幾點需要說明的:
  (1)、如果將浮點型的數據轉換成int類型的,內部操作是通過round()或者floor()函數來實現的,而不是通過cast實現!
  (2)、對於BINARY類型的數據,只能將BINARY類型的數據轉換成STRING類型。如果你確信BINARY類型數據是一個數字類型(a number),這時候你可以利用嵌套的cast操作,比如a是一個BINARY,且它是一個數字類型,那麽你可以用下面的查詢:

1 SELECT (cast(cast(a as string) as double)) from src;

我們也可以將一個String類型的數據轉換成BINARY類型。
  (3)、對於Date類型的數據,只能在Date、Timestamp以及String之間進行轉換。下表將進行詳細的說明

有效的轉換 結果
cast(date as date) 返回date類型
cast(timestamp as date) timestamp中的年/月/日的值是依賴與當地的時區,結果返回date類型
cast(string as date) 如果string是YYYY-MM-DD格式的,則相應的年/月/日的date類型的數據將會返回;但如果string不是YYYY-MM-DD格式的,結果則會返回NULL。
cast(date as timestamp) 基於當地的時區,生成一個對應date的年/月/日的時間戳值
cast(date as string) date所代表的年/月/日時間將會轉換成YYYY-MM-DD的字符串。

hive數據類型轉換、字符串函數、條件判斷