數(shù)據(jù)分析EPHS(14)-Hive數(shù)據(jù)類型詳解

解鎖更多數(shù)據(jù)分析文章歡迎關(guān)注公眾號:數(shù)據(jù)分析EPHS

本篇來學習一下Hive中的數(shù)據(jù)類型桨嫁,以及如何在Hive SQL中去處理這些數(shù)據(jù)類型驱富。

Hive的數(shù)據(jù)類型可以分為基本類型纱烘、字符串類型掌测、日期與時間戳類型欣簇、集合類型常空,我們分別進行介紹:

1瘫镇、 基本類型

Hive中的基本類型如下:

數(shù)據(jù)類型 大小 范圍 示例
TINYINT 1byte -128 ~ 127 100Y
SMALLINT 2byte -32768 ~ 32767 100S
INT 4byte -2^32~ 2^32-1 100
BIGINT 8byte -2^64~ 2^64-1 100L
FLOAT 4byte 單精度浮點數(shù) 5.21
DOUBLE 8byte 雙精度浮點數(shù) 5.21
DECIMAL - 高精度浮點數(shù) DECIMAL(9,8)
BOOLEAN - 布爾型 true/false
BINARY - 字節(jié)數(shù)組 -

這里我們對DECIMAL類型做兩點說明:
1)DECIMAL(9,8)代表最多9位數(shù)字鼎兽,后8位是小數(shù)。此時也就是說铣除,小數(shù)點前最多有1位數(shù)字谚咬,如果超過一位則會變成null。
2)如果不指定參數(shù)尚粘,那么默認是DECIMAL(10,0)择卦,即沒有小數(shù)位,此時0.82會變成1。

這里我們通過一個SQL來進行說明:

創(chuàng)建表:

create table if not exists 
datatype_test1(id int,col1 decimal,col2 decimal(9,8)) 
row format delimited fields terminated by ',';

我們從txt中讀取數(shù)據(jù):

load data local inpath '/Users/meituan_sxw/Downloads/test1.txt' into table datatype_test1;

#txt中的內(nèi)容
1,0.82,83.2
2,1.06,9.22

接下來查看hive中的數(shù)據(jù):

 select * from datatype_test1;

結(jié)果如下:

2秉继、字符串類型

Hive中的字符串類型包含如下三種:

數(shù)據(jù)類型 長度 示例
STRING - 'abc'
VARCHAR 1-65535 'abc'
CHAR 1-255 'abc'

對于VARCHAR創(chuàng)建時需指定長度祈噪,如果插入的字符串超過了指定的長度,則會被截斷尚辑,尾部的空格也會作為字符串的一部分辑鲤,影響字符串的比較。
對于CHAR類型來說杠茬,它是固定長度的月褥,如果插入的字符串長度不如指定的長度,則會用空格補齊瓢喉。但是尾部的空格不影響字符串的比較宁赤。

接下來通過例子進行說明:

創(chuàng)建表:

create table if not exists 
datatype_test2(id int,str_col string,varchar_col varchar(5),char_col char(5)) 
row format delimited fields terminated by ',';

我們從txt中讀取數(shù)據(jù):

load data local inpath '/Users/meituan_sxw/Downloads/test2.txt' into table datatype_test2;

#txt中的內(nèi)容
1,james harden,harden,harden
2,Westbrook,westbrook,westbrook
3,chris paul,paul,paul

接下來查看hive中的數(shù)據(jù):

 select * from datatype_test2;

結(jié)果如下:

再來看一下對于不同類型的字符串比較的例子,這里只需要注意第三行即可:

select 
  *,
  char_col='paul ', 
  varchar_col='paul ',
  char_col='paul',
  varchar_col='paul'  
from 
  datatype_test2; 

結(jié)果如下:

可以看到灯荧,對于尾部的空格,并不影響char類型字符串的比較盐杂,但影響了varchar類型字符串的比較逗载。

3、日期與時間戳類型

日期與時間戳類型主要有以下兩種:

數(shù)據(jù)類型 格式 示例
DATE yyyy-MM-dd 2020-07-04
TIMESTAMPS yyyy-MM-dd HH:mm:ss.fffffffff 2020-07-04 12:36:25.111

接下來做兩點說明:
1)DATE類型只支持yyyy-MM-dd格式的數(shù)據(jù)链烈,其余格式都是錯誤的厉斟,會變?yōu)镹ULL
2)TIMESTAMPS表示UTC時間,格式為yyyy-MM-dd HH:mm:ss.fffffffff强衡,即最多支持納秒級擦秽,如果長度超出,則會變成NULL

接下來還是通過例子來說明:

創(chuàng)建表:

 create table if not exists 
datatype_test3(id int,date_col Date,timestamp_col timestamp) 
row format delimited fields terminated by ',';

我們從txt中讀取數(shù)據(jù):

load data local inpath '/Users/meituan_sxw/Downloads/test3.txt' into table datatype_test3;

#txt中的內(nèi)容
1,2020-07-04,2020-07-04 13:20:23.22
2,20200704,2020-07-04 13:20:23.222222222
3,2020-07-04,2020-07-04 13:20:23.22222222222

接下來查看hive中的數(shù)據(jù):

 select * from datatype_test3;

結(jié)果如下:

4漩勤、集合類型

Hive中集合類型主要包含三種:STRUCT感挥、ARRAY、MAP越败。咱們來分別介紹触幼。

STRUCT
STRUCT 即結(jié)構(gòu)體,通過相關(guān)的不同類型的數(shù)據(jù)來描述一個數(shù)據(jù)對象

ARRAY
ARRAY表示一組相同數(shù)據(jù)類型的集合究飞,下標從零開始置谦,可以用下標訪問

MAP
MAP是一組鍵值對的組合,可以通過KEY訪問VALUE

通過例子來感受下上述三種類型的使用:

創(chuàng)建表:

create table if not exists 
datatype_test4(
  id int,
  info struct<name:string,weight:double>,
  score array<Int>,
  info_map map<string,string>) 
row format delimited fields terminated by ',' 
COLLECTION ITEMS TERMINATED BY ';' 
MAP KEYS TERMINATED BY ':';

可以看到亿傅,我們定義了三種不同的集合類型字段媒峡,并指定了集合類型的分隔符為";",即struct葵擎,array谅阿,以及map的不同kv之間用";"分割,同時定義了map的key和value之間用":"分割。

接下來奔穿,我們創(chuàng)建如下內(nèi)容的txt文件:

1,文文;70,99;96;100,name:文文;country:china
2,毛毛;60,99;92;100,name:毛毛;country:koera
3,超超;65,99;96;100,name:超超;country:japan

倒入hive中并查看:

load data local inpath '/Users/meituan_sxw/Downloads/test4.txt' into table datatype_test4;

select * from datatype_test4;

結(jié)果如下:

接下來镜沽,進一步介紹不同類型的讀取,首先是struct類型贱田,可以通過"."來訪問不同的內(nèi)容:

select 
  info.name as name,
  info.weight as weight 
from 
  datatype_test4;

#輸出
文文  70.0
毛毛  60.0
超超  65.0

對于Array類型缅茉,可以通過下標進行訪問,下標從0開始:

select 
  info.name as name,
  score[0] as math,
  score[1] as chinese,
  score[2] as English 
from 
  datatype_test4;

# 輸出
文文  99  96  100
毛毛  99  92  100
超超  99  96  100

對于Map類型男摧,可以通過['key']來訪問不同key的內(nèi)容

select 
  info_map['name'] as name,
  info_map['country'] as country 
from 
  datatype_test4;

#輸出
文文  china
毛毛  koera
超超  Japan

集合類型還包括UNIONTYPE蔬墩,這里不做介紹,感興趣的同學可自行查閱相關(guān)資料耗拓。

參考文獻

1拇颅、http://www.reibang.com/p/1c9263cc2f9a
2、https://segmentfault.com/a/1190000016125717?utm_source=tag-newest

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末乔询,一起剝皮案震驚了整個濱河市樟插,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌竿刁,老刑警劉巖黄锤,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異食拜,居然都是意外死亡鸵熟,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門负甸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來流强,“玉大人,你說我怎么就攤上這事呻待〈蛟拢” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵蚕捉,是天一觀的道長僵控。 經(jīng)常有香客問我,道長鱼冀,這世上最難降的妖魔是什么报破? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮千绪,結(jié)果婚禮上充易,老公的妹妹穿的比我還像新娘。我一直安慰自己荸型,他們只是感情好盹靴,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般稿静。 火紅的嫁衣襯著肌膚如雪梭冠。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天改备,我揣著相機與錄音控漠,去河邊找鬼。 笑死悬钳,一個胖子當著我的面吹牛盐捷,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播默勾,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼碉渡,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了母剥?” 一聲冷哼從身側(cè)響起滞诺,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎环疼,沒想到半個月后习霹,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡秦爆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年序愚,在試婚紗的時候發(fā)現(xiàn)自己被綠了憔披。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片等限。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖芬膝,靈堂內(nèi)的尸體忽然破棺而出望门,到底是詐尸還是另有隱情,我是刑警寧澤锰霜,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布筹误,位于F島的核電站,受9級特大地震影響癣缅,放射性物質(zhì)發(fā)生泄漏厨剪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一友存、第九天 我趴在偏房一處隱蔽的房頂上張望祷膳。 院中可真熱鬧,春花似錦屡立、人聲如沸直晨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽勇皇。三九已至罩句,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間敛摘,已是汗流浹背门烂。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留着撩,地道東北人诅福。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像拖叙,于是被迫代替她去往敵國和親氓润。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355