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
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