Hive 视图、分桶表与用户自定义函数

本文介绍了Hive的视图和分桶表的概念及应用。视图提供了一种逻辑上的数据隔离,简化查询并保护原始数据。分桶表通过哈希算法对数据进行分组,提升Join查询和抽样效率。同时,文章还展示了创建和使用用户自定义函数(UDF)的过程,包括UDF和UDAF的创建与测试,强调了不同数据类型对计算结果的影响。
摘要由CSDN通过智能技术生成

教材第六章 Hive 数据库对象与用户自定义函数 实验

一 Hive 视图

hive视图只是一个逻辑概念,创建视图时定义的select 语句是一种逻辑规则,在视图定义时不会立即执行;只有当对视图执行select查询时,才会真正执行视图中定义的select语句逻辑规则来获取数据。

1创建视图

视图的一个简单例子:以emp表为例

hive> create view emp_view as select ename, job, sal from emp where deptno = 20;
hive> desc emp_view;

OK
ename                   varchar(30)                                 
job                     varchar(50)                                 
sal                     double 
hive> desc formatted emp_view;
说明:定义一个视图emp_view,其逻辑规则是展示emp表的deptno列值等于20的ename, job, sal三列数据;视图能够隐藏真实数据表emp的表结构信息和其他无关列的值,只把允许用户查看的员工姓名、岗位、薪资信息展示给用户,而不允许用户查看员工所属的部门、上司是谁、员工的编号,视图能够起到对原始数据表的信息保护作用,只把允许查看的必要数据展示给有访问权限的上层应用程序或用户

hive> select * from emp_view;
OK
tomiy    saleman    8000.0
smith    clerk    8000.0
zhang    saleman    8000.0
说明:对emp_view进行查询,只能看到ename, job, sal三列的数据,甚至用户都不一定知道emp_view其是一个视图,而不是一张真实的表!另外通过对视图进行SQL查询,可以简化SQL语句。

视图的一个较复杂例子:以sogou表为例

hive> create view sogou_view_limit_1000 as select * from sogou_table_ext where keyword is not null and keyword != '' limit 1000;
OK
Time taken: 0.0712 seconds
说明:创建一个视图sogou_view_limit_1000,其数据源自数据表sogou_table_ext的前1000行数据

hive> select * from sogou_table_ext where keyword is not null and keyword != '' limit 1000;

Time taken: 1.5 seconds

说明:创建视图比执行视图中定义的SQL语句速度更快,说明创建视图的数据并未执行SQL语句,而只是定义了视图的逻辑规则;注意本条select查询带limit 1000语句,未启动MapReduce任务

hive> desc sogou_view_limit_1000;
OK
ts                      string                                      
uid                     string                                      
keyword                 string                                      
rank                    int                                         
seq                     int                                         
url                     string                                      
year                    int                                         
month                   int                                         
day                     int                                         
hour                    int;
说明:视图的列属性和源自的数据表没有任何区别

hive> desc formatted sogou_view_limit_1000;

hive>  select * from sogou_view_limit_1000;

Time taken: 25.824 seconds, Fetched: 1000 row(s)
说明:查询sogou_view_limit_1000视图中的数据,需要执行一个MapReduce任务,原因是该视图中定义的SQL语句逻辑规则中包含limit语句;即使直接执行视图定义中的select * from sogou_table_ext where keyword is not null and keyword != '' limit 1000;语句并不会调用MapReduce任务,但是对sogou_view_limit_1000视图进行SQL查询却会调用MapReduce任务。对逻辑规则中包含limit语句的视图进行select查询,会调用MapReduce任务。

再定义一个逻辑规则中不包含limit语句的视图:
hive> create view sogou_view as select * from sogou_table_ext where keyword is not null and keyword != '';

hive> select * from sogou_view;  对逻辑规则中不包含limit语句的视图执行select查询,不会调用MapReduce任务!

2 视图应用
hive> create view sogou_rank_3_view as select * from sogou_table_ext_partition where rank <=3;
OK
hive> desc view sogou_rank_3_view ;
OK
ts                      string                                      
uid                     string                                      
keyword                 string                                      
rank                    int                                         
seq                     int                                         
url                     string                                  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值