Hive 实操案例六:统计上传视频最多的用户 Top10 以及他们上传的视频观看次数在前 20 的视频

一、数据表结构

视频表 t_video

字段注释描述
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 个

用户表 t_user

字段注释类型
uploader上传者用户名string
videos上传视频数int
friends朋友数量int

二、具体实现

-- 统计上传视频最多的用户 Top10 以及他们上传的视频观看次数在前 20 的视频
/**
  思路:
    1.处理结果集 1:在用户表中按照 uploader 分组聚合统计每个用户的总上传视频数,再使用 order by 降序和 limit 获取前 10 的用户
    2.处理结果集 2:在视频表中按照 videoid 和 uploader 分组聚合统计观看次数
    3.使用结果集 1 左连接结果集 2,关联字段为 uploader,然后使用排序窗口函数按左表的 uploader 分组,右表的观看次数降序进行组内编号
    4.使用 where 子句选取前 20 的数据
*/
SELECT 
	uploader,
	videoid,
	num,
	rn 
FROM 
(
	SELECT 
		a.uploader,
		b.videoid,
		b.num,
		DENSE_RANK() over(PARTITION by a.uploader ORDER by b.num DESC) as rn 
	FROM 
	(
		SELECT 
			uploader,
			SUM(videos) as videos  
		FROM t_user
		group by uploader 
		order by videos DESC 
		limit 10
	) a
	left join
	(
		SELECT 
			videoid,
			uploader,
			SUM(`views`) as num 
		FROM t_video
		group by videoid, uploader
	) b
	on a.uploader=b.uploader
) t
WHERE rn <= 20;
  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值