1. 程式人生 > >hive---資料型別

hive---資料型別

數字型別

tinyint------微整數(-128至127)

smallint-------2位元組相當於java中的short

int/integer---4位元組

bigint-----8位元組(相當於java中的long)

float----4位元組(浮點型)小數

double--8位元組(浮點型精度更高)小數

日期時間型別

timestamp-------時間戳

date-----日期

字串型別

string

varchar(10)----可變長度字串

char-----單字元

混雜型別

boolean------布林值

binary-----用的少

複合型別

array陣列型別-----array<string>

排序函式:sort_array(欄位/陣列)

資料中有複雜資料型別建表

create table t_movie(movie_name string,actors array<string>,first_show date)
row format delimited fields terminated by ','
collection items terminated by ':';----------集合的元素按':'分割

查詢:
select movie_name,actors[0],first_show from t_movie;---陣列中第一個元素

select movie_name,actors,first_show
from t_movie where array_contains(actors(陣列欄位),'吳剛'(要查詢的值));------陣列中的內容

select movie_name
,size(actors) as actor_number  ------------陣列長度函式
,first_show
from t_movie;

map型別

-- 有如下資料:
1,zhangsan,father:xiaoming#mother:xiaohuang#brother:xiaoxu,28
2,lisi,father:mayun#mother:huangyi#brother:guanyu,22
3,wangwu,father:wangjianlin#mother:ruhua#sister:jingtian,29
4,mayun,father:mayongzhen#mother:angelababy,26

-- 建表對映上述資料
create table t_family(id int,name string,family_members map<string,string>,age int)
row format delimited fields terminated by ','
collection items terminated by '#'
map keys terminated by ':';-----------------kv間隔

-- 匯入資料
load data local inpath '/root/hivetest/fm.dat' into table t_family;

-- 查出每個人的親人數量
select id,name,size(family_members) as relations,age
from  t_family;

-- 查出所有擁有兄弟的人及他的兄弟是誰
-- 方案1:一句話寫完
select id,name,age,family_members['brother']-----family_members欄位中key值為brother的
from t_family  where array_contains(map_keys(family_members)-------family_members中所有key值,返回陣列。map_values所有value的值

,'brother');


-- 方案2:子查詢
select id,name,age,family_members['brother']
from
(select id,name,age,map_keys(family_members) as relations,family_members 
from t_family) tmp 
where array_contains(relations,'brother');

struct型別

假如有以下資料:
1,zhangsan,18:male:深圳
2,lisi,28:female:北京
3,wangwu,38:male:廣州
4,趙六,26:female:上海
5,錢琪,35:male:杭州
6,李剛,48:female:南京
*/

-- 建表對映上述資料

drop table if exists t_user;
create table t_user(id int,name string,info struct<age:int,sex:string,addr:string>)
row format delimited fields terminated by ','
collection items terminated by ':';

-- 匯入資料
load data local inpath '/root/hivetest/user.dat' into table t_user;

-- 查詢每個人的id name和地址
select id,name,info.addr
from t_user;

union型別

多個型別中選其中之一。0.7版本後使用