一、數據表結構
視頻表 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 個 |
二、具體實現
-- 統計每個類別中的視頻熱度 Top10
/**思路:1.先使用 explode 函數將 category 字段扁平化2.按照 videoid 和 扁平化后的類別字段分組聚合統計觀看次數3.使用排序窗口函數按類別分組、觀看次數降序排序進行組內編號4.使用 where 子句篩選每個類別組內的 top10 數據
*/
SELECT cg,videoid,`views`,rn
FROM
(SELECT cg,videoid,`views`,DENSE_RANK() over(PARTITION by cg ORDER by `views` desc) as rn FROM (SELECT videoid,cg,SUM(`views`) as `views`FROM t_video gv lateral view explode(category) adtable as cg group by cg, videoid ) t1
) t2
WHERE rn <= 10;