hive高级操作

复杂数据类型

复杂数据类型包括数组(ARRAY)、映射(MAP)和结构体(STRUCT),具体如下所示:

说明:

ARRAY:ARRAY 类型是由一系列相同数据类型的元素组成,这些元素可以通过下标来访问。比如有一个 ARRAY 类型的变量 fruits,它是由['apple','orange','mango']组成,那么我们可以通过 fruits[1]来访问元素 orange,因为 ARRAY 类型的下标是从 0 开始的 。
MAP:MAP 包含 key->value 键值对,可以通过 key 来访问元素。比如”userlist”是一个 map类 型 , 其 中 username 是 key , password 是 value ; 那 么 我 们 可 以 通 过userlist['username']来得到这个用户对应的 password。
STRUCT:STRUCT 可以包含不同数据类型的元素。这些元素可以通过”点语法”的方式来得到所需要的元素,比如 user 是一个 STRUCT 类型,那么可以通过 user.address 得到这个用户的地址。

示例:

CREATE TABLE student(
name STRING,
favors ARRAY<STRING>,
scores MAP<STRING, FLOAT>,
 address STRUCT<province:STRING, city:STRING, detail:STRING, zip:INT>

 ROW FORMAT DELIMITED 
 FIELDS TERMINATED BY '\t' 
 COLLECTION ITEMS TERMINATED BY ';'
MAP KEYS TERMINATED BY ':' ;

说明:
1.字段 name 是基本类型,favors 是数组类型,可以保存很多爱好,scores 是映射类型,可以保存多个课程的成绩,address 是结构类型,可以存储住址信息。
2.ROW FORMAT DELIMITED 是指明后面的关键词是列和元素分隔符的
3.FIELDS TERMINATED BY 是字段分隔符
4.COLLECTION ITEMS TERMINATED BY 是元素分隔符(Array 中的各元素、Struct 中的各元素、Map 中的 key-value 对之间)
5.MAP KEYS TERMINATED BY 是 Map 中 key 与 value 的分隔符
6.LINES TERMINATED BY 是行之间的分隔符
8.STORED AS TEXTFILE 指数据文件上传之后保存的格式

总结:在关系型数据库中,我们至少需要三张表来定义,包括学生基本表、爱好表、成绩表;但在 Hive 中通过一张表就可以搞定了。也就是说,复合数据类型把多表关系通过一张表就可以实现了。

1.3.示例演示
1.3.1.array
建表语句:
create table person1(name string,work_locations array<string>)
row format delimited fields terminated by '\t'
collection items terminated by ',';
数据:
huangbo beijing,shanghai,tianjin,hangzhou
xuzheng changchu,chengdu,wuhan
wangbaoqiang dalian,shenyang,jilin
导入数据:
load data local inpath '/home/hadoop/person.txt' into table person1;
查询语句:
Select * from person1;
Select name from person1;
Select work_locations from person1;
Select work_locations[0] from person1;

1.3.2.map
建表语句:
create table score(name string, scores map<string,int>)
row format delimited fields terminated by '\t'
collection items terminated by ','
map keys terminated by ':';
数据:
huangbo yuwen:80,shuxue:89,yingyu:95
Stay hungry Stay foolish -- http://blog.csdn.net/zhongqi2513
xuzheng yuwen:70,shuxue:65,yingyu:81
wangbaoqiang yuwen:75,shuxue:100,yingyu:75
导入数据:
load data local inpath '/home/hadoop/score.txt' into table score;
查询语句:
Select * from score;
Select name from score;
Select scores from score;
Select s.scores['yuwen'] from score s;

1.3.3.struct
建表语句:
create table structtable(id int,course struct<name:string,score:int>)
row format delimited fields terminated by '\t'
collection items terminated by ',';
数据:
1 english,80
2 math,89
3 chinese,95
导入数据:
load data local inpath '/ home/hadoop / structtable.txt' into table structtable;
查询语句:
Select * from structtable;
Select id from structtable;
Select course from structtable;
Select t.course.name from structtable t;
Select t.course.score from structtable t;

1.3.4.uniontype
参考资料:http://yugouai.iteye.com/blog/18491

2.视图
和关系型数据库一样,Hive 也提供了视图的功能,不过请注意,Hive 的视图和关系型数据库的数据还是有很大的区别:
1.只有逻辑视图,没有物化视图;
2.视图只能查询,不能 Load/Insert/Update/Delete 数据;
3.视图在创建时候,只是保存了一份元数据,当查询视图的时候,才开始执行视图对应的那些子查询
创建视图
create view view_name as select * from carss;
create view carss_view as select * from carss limit 500;
查看视图
show tables; // 可以查看表,也可以查看视图
desc view_name // 查看某个具体视图的信息
desc carss_view
删除视图
drop view view_name
drop view if exists carss_view
使用视图
create view sogou_view as select * from sogou_table where rank > 3 ;
select count(distinct uid) from sogou_view;

  • 38
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值