Hive 实战
- 需求描述
统计硅谷影音视频网站的常规指标,各种 TopN 指标:
-- 统计视频观看数 Top10
-- 统计视频类别热度 Top10
-- 统计出视频观看数最高的 20 个视频的所属类别以及类别包含 Top20 视频的个数
-- 统计视频观看数 Top50 所关联视频的所属类别排序
-- 统计每个类别中的视频热度 Top10,以 Music 为例
-- 统计每个类别视频观看数 Top10
-- 统计上传视频最多的用户 Top10 以及他们上传的视频观看次数在前 20 的视频
- 数据结构
1)视频表
视频表
字段 | 备注 | 详细描述 |
videoId | 视频唯一 id(String) | 11 位字符串 |
uploader | 视频上传者(String) | 上传视频的用户名 String |
age | 视频年龄(int) | 视频在平台上的整数天 |
category | 视频类别(Array<String>) | 上传视频指定的视频分类 |
length | 视频长度(Int) | 整形数字标识的视频长度 |
views | 观看次数(Int) | 视频被浏览的次数 |
rate | 视频评分(Double) | 满分 5 分 |
Ratings | 流量(Int) | 视频的流量,整型数字 |
conments | 评论数(Int) | 一个视频的整数评论数 |
relatedId | 相关视频 id(Array<String>) | 相关视频的 id,最多 20 个 |
2)用户表
用户表
字段 | 备注 | 字段类型 |
uploader | 上传者用户名 | string |
videos | 上传视频数 | int |
friends | 朋友数量 | int |
- 准备工作
- 准备表
1)需要准备的表
创建原始数据表:gulivideo_ori,gulivideo_user_ori, 创建最终表:gulivideo_orc,gulivideo_user_orc
2)创建原始数据表:
(1)gulivideo_ori
(2)创建原始数据表: gulivideo_user_ori
- 业务分析
- 统计视频观看数 Top10
思路:使用 order by 按照 views 字段做一个全局排序即可,同时我们设置只显示前 10
条。
最终代码:
- 统计视频类别热度 Top10
- 统计出视频观看数最高的 20 个视频的所属类别以及类别包含
- Top20 视频的个数
思路:
(1)先找到观看数最高的 20 个视频所属条目的所有信息,降序排列
(2)把这 20 条信息中的 category 分裂出来(列转行)
(3)最后查询视频分类名称和该分类下有多少个 Top20 的视频最终代码:
- 统计视频观看数 Top50 所关联视频的所属类别排序
- 代码:
- 统计每个类别中的视频热度 Top10,以 Music 为例
- 思路:
- 统计每个类别视频观看数 Top10
- 最终代码
- 统计上传视频最多的用户Top10 以及他们上传的视频观看次数在前 20 的视频
- 思路:
(1)求出上传视频最多的 10 个用户
(2)关联 gulivideo_orc 表,求出这 10 个用户上传的所有的视频,按照观看数取前 20