hive中对复杂数据类型的支持

来源:互联网 发布:网络机顶盒看电视直播 编辑:程序博客网 时间:2024/05/01 21:59
hive提供了复合数据类型:
struct:struct内部的数据可以通过DOT(.)来存取,例如,表中一列c的类型为STRUCT{a INT; b INT},可以通过c.a来访问域a
map(Key-Value对):访问指定域可以通过["指定域名称"]进行,例如,一个map M包含了一个group->gid的kv对,gid的值可以通过M['group']来获取
array:array中的数据为相同类型,例如,array A中元素['a','b','c'],则A[0]的值为'a',A[1]的值为'b'


**hive中暂没有支持list类型**


/*struct使用示例*/


建表:
create table s1(id INT,info struct<p1:string,p2:int>) 


ROW FORMAT DELIMITED //指定记录按行划分
FIELDS TERMINATED BY ','//指定元组之间的分隔符 


COLLECTION ITEMS TERMINATED BY ':';//指定元组各个字段之间的分隔符 






导入数据:
LOAD DATA LOCAL INPATH '/hivetest1' INTO TABLE s1;




/hivetest1中数据格式如下:
1,zhou:30
2,yan:30
3,chen:20


查询:
select info.p1 from s1;






查询结果为:
zhou
yan
chen


/*array使用示例*/


建表:
create table s2(id INT,info array<INT>) 


ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 


COLLECTION ITEMS TERMINATED BY ':';


导入数据:


LOAD DATA LOCAL INPATH '/hivetest2' INTO TABLE s2;
/hivetest2中数据格式如下:


1,1:2:3:4
2,5:6
3,7:8:9:10
4


,11


查询:
select info[1] from s2 ;


查询结果为:
2


6
8
NULL




/*map使用示例*/


建表:
create table s3(id INT,info map<STRING,INT>) 


ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' 


COLLECTION ITEMS TERMINATED BY ','
MAP KEYS TERMINATED BY ':';//指定key-value分隔符


导入数据:


LOAD DATA LOCAL INPATH '/hivetest3' INTO TABLE s3;




/hivetest3中数据格式如下:
1 job:80,team:60,person:70
2 job:60,team:80
3 job:90,team:70,person:100


查询:
select info['person'] from s3;
查询结果为:
70
NULL
100
0 0
原创粉丝点击