大数据开发——Hive实战案例

这篇具有很好参考价值的文章主要介绍了大数据开发——Hive实战案例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 创建表结构

1.1 视频表结构

大数据开发——Hive实战案例

1.2 用户表结构

大数据开发——Hive实战案例

2. 准备工作

2.1 创建临时表

  • 由于使用的是orc方式进行存储,所以我们需要建立一个临时表,通过查询插入的方式将数据插入到最终表中。

创建临时视频表

create table gulivideo_ori(
 videoId string, 
 uploader string, 
 age int, 
 category array<string>, 
 length int, 
 views int, 
 rate float, 
 ratings int, 
 comments int,
 relatedId array<string>)
row format delimited fields terminated by "\t"
collection items terminated by "&"
stored as textfile;

创建临时用户表

create table gulivideo_user_ori(
 uploader string,
 videos int,
 friends int)
row format delimited 
fields terminated by "\t" 
stored as textfile;

加载原数据到临时表

load data local inpath "/opt/module/data/video" into table gulivideo_ori;
load data local inpath "/opt/module/user" into table gulivideo_user_ori;

2.2 创建最终使用表

创建视频表

create table gulivideo_orc(
 videoId string, 
 uploader string, 
 age int, 
 category array<string>, 
 length int, 
 views int, 
 rate float, 
 ratings int, 
 comments int,
 relatedId array<string>)
stored as orc
tblproperties("orc.compress"="SNAPPY");

创建用户表

create table gulivideo_user_orc(
 uploader string,
 videos int,
 friends int)
row format delimited 
fields terminated by "\t" 
stored as orc
tblproperties("orc.compress"="SNAPPY");

2.3 对创建表进行解读

由于初始表和最终表他们两者中的结构都是一样的,所以对其中一种进行解读

  • 对于用户表

    • 三个字段都是基本数据类型,行格式字段分割以‘\t’结束,以orc的方式存储,并且设置压缩属性为snappy
  • 视频表

    • 视频表中视频的类别和视频的相关视频两个字段是数组的方式进行存储的 ,字段之间分隔符为‘\t’,数组中元素的分隔符为‘&’

3. 业务分析

需求Ⅰ:统计视频观看数 Top10

  • 分析
    • 第一步: 本需求比较简单,直接对视频的观看数进行排序,使用LIMIT关键字,限定前十条数据

代码:

select videoId
from gulivideo_orc
order by views
limit 10;

大数据开发——Hive实战案例


需求Ⅱ:统计视频类别热度 Top10

  • 分析
    • 第一步:获取视频类别,使用炸裂函数explode,由于不需要表中的其他字段,所以可以不考虑使用侧偏移
    • 第二部:按照视频的类型进行分组,并计算每一个类别的视频总数,按照总数获取前十的视频类别

步骤代码:

--步骤一使用下列任意一种都可以,第一种使用侧偏移,第二种直接炸裂
select 
videoId,
category_name
from gulivideo_orc
lateral view explode(category) tmp_category as category_name;t1

select
explode(category) categoru_name
from gulivideo_orc;t1

--第二步代码:
select
category_name,
count(*) ct
from t1
group by category_name
order by ct desc
limit 10;

最终代码:

select
category_name,
count(*) ct
from
(select
explode(category) category_name
from gulivideo_orc)t1
group by category_name
order by ct desc
limit 10;

大数据开发——Hive实战案例


需求Ⅲ:统计出视频观看数最高的 20 个视频的所属类别以及每一个类别包含 Top20 视频的个数

  • 分析
    • 第一步:统计观看数最高的二十个视频
    • 第二步:获取视频的类别
    • 第三步:按照类别进行分组,获取每一组的视频数(即为每一个类别中包含Top20视频的个数)
select 
category
from gulivideo_orc
order by views desc
limit 20;t1

select
explode(category) category_name
from t1;t2

select
category_name,
count(*) video_sum
from  t2
group by category_name;

最终代码:

select
category_name,
count(*) video_sum
from 
(select
explode(category) category_name
from 
(select 
category
from gulivideo_orc
order by views desc
limit 20)t1)t2
group by category_name;

大数据开发——Hive实战案例


需求Ⅳ: 统计视频观看数 Top50 所关联视频的所属类别排序

  • 分析
    • 第一步:获取观看数Top50的视频
    • 第二步:获取视频的关联的视频Id
    • 第三步:和原表做内连接,查询到该id的类别
    • 第四步:将类别进行炸裂
    • 第五步:按照类别进行分组,并且统计该分组下的视频总数,按照总数进行排序

分步代码:

select
relatedId
from gulivideo_orc
order by views desc
limit 50;t1

select
explode(relatedId) relatedId_id
from t1;t2

select
category
from t2
join gulivideo_orc t3
on t2.relatedId_id = t3.videoId;t4

select
explode(category) category_name
from t4;t5

select
category_name,
count(*) ct
from t5
group by category_name
order by ct desc;

代码:

select
category_name,
count(*) ct
from 
(select
explode(category) category_name
from 
(select
category
from 
(select
explode(relatedId) relatedId_id
from 
(select
relatedId
from gulivideo_orc
order by views desc
limit 50)t1)t2
join gulivideo_orc t3
on t2.relatedId_id = t3.videoId)t4)t5
group by category_name
order by ct desc;

大数据开发——Hive实战案例


需求Ⅴ:统计每个类别中的视频热度 Top10,以 Music 为例

  • 分析
    • 第一步:将视频的类别炸裂开
    • 第二步:获取类别是Music的数据,并且按照观看数进行排序

分布代码:

select
videoId,
category_name
from gulivideo_orc
lateral view explode(category) tmp_category as category_name;t1

select
videoId,
views,
category_name
from t1
where category_name = "Music"
order by views desc
limit 10;

代码:

select
videoId,
views,
category_name
from 
(select
videoId,
views,
category_name
from gulivideo_orc
lateral view explode(category) tmp_category as category_name)t1
where category_name = "Music"
order by views desc
limit 10;

大数据开发——Hive实战案例


需求Ⅵ:统计每个类别视频观看数 Top10

  • 分析
    • 由于要求组内进行排序,所以使用开窗函数over()
    • 第一步:使用explode()函数,将类别分开
    • 第二步:使用开窗函数,按照类别分区,并且使用观看数进行排序
    • 第三步:获取前十数据

分步代码:

select 
videoId,
views,
category_name
from gulivideo_orc
lateral view explode(category) tmp_category as category_name;t1

select
videoId,
views,
category_name
rank() over(partition by t1.category_name order by t1.views desc) rk
from t1;t2

select
videoId,
views,
category_name,
rk
from t2
where t2.rk <= 10; 

代码:

select
videoId,
views,
category_name
rk
from (
select
videoId,
views,
category_name,
rank() over(partition by t1.category_name order by t1.views desc) rk
from 
(select 
videoId,
views,
category_name
from gulivideo_orc
lateral view explode(category) tmp_category as category_name)t1)t2
where t2.rk <= 10; 

大数据开发——Hive实战案例
大数据开发——Hive实战案例


需求Ⅶ:统计上传视频最多的用户 Top10 以及他们上传的视频观看次数在前 20 的视频

  • 分析
    • 第一步:统计上传视频最多的用户 Top10
    • 第二步:用户表和视频表做内连接,获取Top10用户上传的所有视频Id
    • 第三步:按照用户进行分区,并且获取每一个用户排名前20的视频(按照视频观看书排序)

分布代码:

select
uploader
from
gulivideo_user_orc
order by videos desc
limit 10;t1

select
videoId,
views,
t2.uploader 
from t1 
join gulivideo_orc g
on t1.uploader = g.uploader;t2

select
videoId,
views,
uploader,
rank()over(partition by uploader order by views desc) rk
from t2;t3

select
videoId,
views,
uploader
from t3
where rk<= 20;

代码:文章来源地址https://www.toymoban.com/news/detail-408164.html

select
videoId,
views,
uploader,
rank()over(partition by uploader order by views desc) rk
from 
(select
videoId,
views,
t1.uploader 
from 
(select
uploader
from
gulivideo_user_orc
order by videos desc
limit 10)t1 
join gulivideo_orc g
on t1.uploader = g.uploader) t2;
  • 由于数据不全,所有没有查询到数据
    大数据开发——Hive实战案例

到了这里,关于大数据开发——Hive实战案例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据开发之Hive案例篇10-大表笛卡尔积优化

    需求描述: 表概述: 需要实现的需求 SQL代码: 运行日志: 从日志可以看到,数据倾斜了,redcue一直卡在99%不动,过一段时间就被断开了。 web页面日志: 从web页面可以看到,reduce被kill的原因是Container被ApplicationMaster给kill掉了 过一段时间整个Job都被kill掉了 因为reduce卡在了99%,所以

    2024年02月09日
    浏览(84)
  • 大数据开发之Hive案例篇14:某个节点HDFS块比较多

    今天早上到公司,突然收到CDH集群某个节点的存储量的告警,如下图所示: 从图中可以看出,每个节点的HDFS空间是相同的,大多节点HDFS使用量在40%左右,而出问题的这个节点居然直逼80%,鉴于之前问题出现过多次,且每次都是利用空余时间使用HDFS的rebalance进行解决的,此处

    2024年02月11日
    浏览(41)
  • Hive综合应用案例——用户学历查询

    任务描述 本关任务:查询出每一个用户从出生到现在的总天数 编程要求 在右侧编辑器补充hql语句,查询出每一个用户从出生到现在的总天数。 创建数据库:mydb 创建表:usertab 字段名 类型 注释 id int 用户id sex string 性别,f:女性,m:男性 time string 出生日期 education string 学历 oc

    2024年02月09日
    浏览(51)
  • 项目实战——参数配置化Spark将Hive表的数据写入需要用户名密码认证的ElasticSearch(Java版本)

    项目实战——将Hive表的数据直接导入ElasticSearch    此篇文章不用写代码,简单粗暴,但是相对没有那么灵活;底层采用MapReduce计算框架,导入速度相对较慢! 项目实战——Spark将Hive表的数据写入ElasticSearch(Java版本)    此篇文章需要Java代码,实现功能和篇幅类似,直接

    2023年04月08日
    浏览(62)
  • 大数据开发之Hive(统计影音视频网站的常规指标)

    1、视频表 字段 备注 详细描述 videoId 视频唯一id(String) 11位字符串 uploader 视频上传者(String) 上传视频的用户名String age 视频年龄(int) 视频在平台上的整天数 category 视频类别(Array) 上传视频指定的视频分类 length 视频长度(Int) 整形数字标识的视频长度 views 观看次数(Int) 视频被浏

    2024年01月19日
    浏览(44)
  • 大数据开发之Hive(详细版,最后有实战训练)

    1.1.1 Hive产生背景 HDFS来存储海量的数据、MapReduce来对海量数据进行分布式并行计算、Yarn来实现资源管理和作业调度。但是面对海量的数据和负责的业务逻辑,开发人员要编写MR对数据进行统计分析难度极大,所以就产生了Hive这个数仓工具。Hive可以帮助开发人员将SQL语句转化

    2024年01月18日
    浏览(51)
  • Hive 分区表 (Partitioned Tables) 『 创建分区表 | CRUD分区 | 修复分区 | 数据导入(静态分区、动态分区) | 查询数据/表结构』

    条件:假如现有一个角色表 t_all_hero ,该表中有6个清洗干净的互不干扰的数据文件:射手、坦克、战士、法师、刺客、辅助 要求:查找出名字为射手且生命值大于6000的角色人数 惯性解决方法:按照MySQL思维很容易想到 问:如何提高效率?这样虽然能够解决问题,但是由于要

    2024年02月04日
    浏览(79)
  • educoder中Hive综合应用案例 — 用户搜索日志分析

    第1关:2018年点击量最高的10个网站域名 第2关:同一种搜索词,哪个网站域名被用户访问最多

    2024年02月01日
    浏览(50)
  • 大数据开发之Hive案例篇9-Not yet supported place for UDAF ‘count‘

    一个很简单的group by和count(*) 操作,然后居然报错了 大概是在Oracle MySQL上写SQL写习惯了,以为可以这么写。 出了问题也是不知道从何排查 后面把order by子句注释掉之后,居然就可以了,那么就是order by 后面不能跟聚合函数了 于是使用了聚合函数的别名,问题搞定 修改为如下

    2024年02月06日
    浏览(52)
  • 《黑马程序员2023新版黑马程序员大数据入门到实战教程,大数据开发必会的Hadoop、Hive,云平台实战项目》学习笔记总目录

    本文是对《黑马程序员新版大数据入门到实战教程》所有知识点的笔记进行总结分类。 学习视频:黑马程序员新版大数据 学习时总结的学习笔记以及思维导图会在后续更新,请敬请期待。 前言:配置三台虚拟机,为集群做准备(该篇章请到原视频进行观看,不在文章内详细

    2024年02月03日
    浏览(70)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包