Hive 实操案例三:统计 Top 20 观看数的视频所属类别以及类别包含 Top20 视频的个数

一、数据表结构

视频表 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 个

二、具体实现

-- 统计出视频观看数最高的 20 个视频的所属类别以及类别包含 Top20 视频的个数
/**
 思路:
   1.先按照 videoid 和 category 字段分组聚合统计观看数
   2.使用排序窗口函数按观看数对视频及其类别进行降序编号
   3.使用 where 子句选取 top20 的视频类别
   4.由于 category 字段为 Array 类型,所以使用 explode 函数将其扁平化,再分组聚合统计类别下的视频个数
*/
SELECT 
	cg,
	SUM(1) as num 
FROM 
(
	SELECT 
		videoid,
		category
	FROM 
	(
		SELECT 
			videoid,
			category,
			DENSE_RANK() over(ORDER by `views` desc) as rn
		FROM 
		(
			SELECT 
				videoid,
				category,
				SUM(`views`) as `views`  
			FROM t_video 
			group by videoid,category 
		) t1
	) t2
	WHERE rn <= 20
) t3 LATERAL view explode(category) adtable as cg
group by cg;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值