栏目分类:
子分类:
返回
终身学习网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
终身学习网 > IT > 前沿技术 > 大数据 > 大数据系统

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

大数据系统 更新时间:发布时间: 百科书网 趣学号

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

一 Hive 视图
1创建视图
hive> create view sogou_view as select * from sogou_table_ext where keyword is not null limit 100;
OK
说明:创建一个视图sogou_view,其数据源自数据表sogou_table_ext的前100行数据
hive> desc sogou_view;
OK
ts                      string                                      
uid                     string                                      
keyword                 string                                      
rank                    int                                         
seq                     int                                         
url                     string                                      
year                    int                                         
month                   int                                         
day                     int                                         
hour                    int;
说明:视图的列属性和源自的数据表没有任何区别

hive>  select * from sogou_view;
说明:查询视图中的数据,需要执行一个MapReduce任务,原因是创建视图时的select *语句不会立即执行,而是在执行视图查询时才会执行,视图只是一个逻辑概念,有查询语句需要对视图进行查询时,才会真正执行select语句获取数据

2 视图应用
hive> create view sogou_rank_view as select * from sogou_table_ext_parttition where rank <=3;
OK
hive> desc sogou_view;
OK
ts                      string                                      
uid                     string                                      
keyword                 string                                      
rank                    int                                         
seq                     int                                         
url                     string                                      
year                    int                                         
month                   int                                         
day                     int                                         
hour                    int 
说明:创建视图sogou_rank_view,其数据源自对表sogou_table_ext_parttition的查询结果,即用户点击排名前3位的搜索记录

hive> select uid, count(*) as cnt from sogou_rank_view group by uid having cnt > 2;
Time taken: 183.985 seconds, Fetched: 419751 row(s)
说明:在用户点击排名前3位的搜索记录视图中,统计用户搜索次数大于2次的搜索记录

二 Hive 分桶表

hive > create table sogou_bucket (uid string, keyword string) clustered by(uid) into 5 buckets row format delimited fields terminated by 't';
hive> desc sogou_bucket;
uid                     string                                      
keyword                 string
说明:创建一个分桶表sogou_bucket,clustered by(uid)是按照uid列进行分桶,共分成5个桶,也就是HDFS上的数据文件按uid拆分成5个数据文件

hive> set hive.enforce.bucketing;
hive.enforce.bucketing=false
hive> set hive.enforce.bucketing = true;
hive> set hive.enforce.bucketing; 
hive.enforce.bucketing=true
说明:开启允许强制分桶;如果开启强制分桶,在insert写入数据时会进行自动分桶,即将HDFS的数据文件自动拆分成多个数据文件

hive> insert overwrite table sogou_bucket select uid, keyword from sogou_table_ext_parttition limit 10000;
OK
Time taken: 140.302 seconds
说明:将sogou_table_ext_parttition表的前1万行数据写入分桶表sogou_bucket中,在写入过程中会自动分桶

在Linux终端执行命令 hadoop fs -ls -R /user/hive/warehouse/sogou_bucket

-rwxr-xr-x   1 root supergroup     104392 2021-09-29 11:00 /user/hive/warehouse/sogou_bucket/000000_0
-rwxr-xr-x   1 root supergroup     105640 2021-09-29 11:00 /user/hive/warehouse/sogou_bucket/000001_0
-rwxr-xr-x   1 root supergroup     112674 2021-09-29 11:00 /user/hive/warehouse/sogou_bucket/000002_0
-rwxr-xr-x   1 root supergroup     103307 2021-09-29 11:00 /user/hive/warehouse/sogou_bucket/000003_0
-rwxr-xr-x   1 root supergroup     107669 2021-09-29 11:00 /user/hive/warehouse/sogou_bucket/000004_0

说明:分桶表sogou_bucket被按照uid自动分成了5个桶,即在写入数据时执行MapReduce作业,按照uid自动分成了5个数据文件

转载请注明:文章转载自 www.051e.com
本文地址:http://www.051e.com/it/279973.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 ©2023-2025 051e.com

ICP备案号:京ICP备12030808号