Hive的數(shù)據(jù)類型

Hive 支持關(guān)系型數(shù)據(jù)庫中的大多數(shù)基本數(shù)據(jù)類型,同時(shí)也支持關(guān)系型數(shù)據(jù)庫中很少出現(xiàn)的3種集合數(shù)據(jù)類型,首先我們來介紹一下這些數(shù)據(jù)類型。

1、基本數(shù)據(jù)類型

數(shù)據(jù)類型 長度
TINYINT 1byte有符號(hào)整數(shù)
SMALLINT 2byte有符號(hào)整數(shù)
INT 4byte有符號(hào)整數(shù)
BIGINT 8byte有符號(hào)整數(shù)
BOOLEAN 布爾類型
FLOAT 單精度浮點(diǎn)數(shù)
DOUBLE 雙精度浮點(diǎn)數(shù)
STRING 字符序列,可以指定字符集,可以使用單引號(hào)或者雙引號(hào)
TIMESTAMP 整數(shù)、浮點(diǎn)數(shù)或者字符串
BINARY 字節(jié)數(shù)組

需要注意的是,所有的上述數(shù)據(jù)類型都是對JAVA接口的實(shí)現(xiàn),因此這些類型的具體行為細(xì)節(jié)和Java當(dāng)中對應(yīng)的類型是完全一致的。例如STRING類型實(shí)現(xiàn)的是java中的String,F(xiàn)LOAT實(shí)現(xiàn)的是Java中的float等等。

新增數(shù)據(jù)類型TIMESTAMP的值可以是整數(shù),也就是距離Unix新紀(jì)元時(shí)間(1970年1月1日,午夜12點(diǎn))的秒數(shù),也可以是浮點(diǎn)數(shù),即距離UNIX新紀(jì)元時(shí)間的秒數(shù),精確到納秒(小數(shù)點(diǎn)后保留9位數(shù));還可以是字符串,即JDBC所約定的時(shí)間字符串格式,格式為YYYY-MM-DD hh:mm:ss.fffffffff.

TIMESTAMPS表示的是UTC時(shí)間。Hive本身提供了不同時(shí)區(qū)互相轉(zhuǎn)換的內(nèi)置函數(shù),也就是to_utc_timestamp函數(shù)和from_tuc_timestamp函數(shù)。

如果用戶在查詢中將一個(gè)float類型的列和一個(gè)double類型的列做對比或者將一種整型類型和另一種整型類型的值做對比,那么結(jié)果將會(huì)怎樣呢?Hive會(huì)隱式地將類型轉(zhuǎn)換為兩個(gè)整形類型種值較大的那個(gè)類型,也就是會(huì)將float轉(zhuǎn)換為double類型,而且如有必要,也會(huì)將任意的整形類型轉(zhuǎn)換為double類型,因此事實(shí)上是同類型之間的比較。

如果用戶希望將一個(gè)字符串類型的列轉(zhuǎn)換為數(shù)值呢?這種情況下用戶可以顯式地將一種數(shù)據(jù)類型轉(zhuǎn)換為其他一種數(shù)據(jù)類型,使用cast函數(shù)即可。

2、集合數(shù)據(jù)類型

Hive中的列支持使用struct,map和array集合數(shù)據(jù)類型:

數(shù)據(jù)類型 描述 示例
STRUCT 和c語言中的struct或者‘對象’類似,都可以通過點(diǎn)符號(hào)訪問元素內(nèi)容,例如某個(gè)列的數(shù)據(jù)類型是STRUCT{first STRING,last STRING},那么第一個(gè)元素可以通過字段名.first來引用。 struct('John','Doe')
MAP MAP是一組鍵值對元素集合,使用數(shù)組表示法可以訪問元素,例如,某個(gè)列的數(shù)據(jù)類型是MAP,其中鍵值對是'first'->'John' 和 'last' -> 'Doe',那么可以通過字段名['last']獲取最后一個(gè)元素 map('first','JOIN','last','Doe'
ARRAY 數(shù)組是一組具有相同類型和名稱的變量的集合,這些變量稱為數(shù)組的元素,每個(gè)數(shù)組元素都有一個(gè)編號(hào),編號(hào)從0開始 Array('John','Doe')

這里有一個(gè)用于演示如何使用這些數(shù)據(jù)類型的表結(jié)構(gòu)聲明語句,這是一張?zhí)摌?gòu)的人力資源應(yīng)用程序中的員工表:

CREATE TABLE IF NOT EXIST employees(
  name STRING,
  salary FLOAT,
  subordinates ARRAY<STRING>,
  deductions MAP<STRING,FLOAT>,
  address STRUCT<street:STRING, city:STRING,state:STRING,zip:INT>
)

其中,那么是一個(gè)簡單的字符串,對于大多數(shù)雇員來說,salary使用float浮點(diǎn)數(shù)類型來表示己經(jīng)足夠了。subordinates(下屬員工)列表是一個(gè)字符串值數(shù)組。字段deductions是一個(gè)由鍵值對構(gòu)成的map,其記錄了每一次的扣除額,這些錢將會(huì)在發(fā)薪水的時(shí)候從員工工資中扣除。map中的鍵時(shí)扣除金額項(xiàng)目的名稱,值可以是一個(gè)百分比值,也可以完全就是一個(gè)數(shù)值。最后,每名雇員的家庭住址使用struct數(shù)據(jù)類型存儲(chǔ),其中的每個(gè)域都被作了命名,并且具有一個(gè)特定的數(shù)據(jù)類型。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容