Hive 实战之谷粒影音

1. 需求描述

统计硅谷影音视频网站的常规指标,各种 TopN 指标:

  1. 统计视频观看数 Top10
  2. 统计视频类别热度 Top10
  3. 统计视频观看数 Top20 所属类别以及类别包含的 Top20 的视频个数
  4. 统计视频观看数 Top50 所关联视频的所属类别 Rank
  5. 统计上传视频最多的用户 Top10 以及他们上传的观看次数在前 20 视频
  6. 统计每个类别中的视频热度 Top10

1.1数据结构

(1)视频表

字段备注详细描述
video id视频唯一 id11 位字符串
uploader视频上传者上传视频的用户名 String
age视频年龄视频在平台上的整数天
category视频类别上传视频指定的视频分类
length视频长度整形数字标识的视频长度
views观看次数视频被浏览的次数
rate视频评分满分 5 分
ratings流量 视频的流量,整型数字
conments评论数一个视频的整数评论数
related ids相关视频 id相关视频的 id,最多 20 个

在这里插入图片描述

(2)用户表

字段备注详细描述
字段备注字段类型
uploader上传者用户名string
videos上传视频数int
friends朋友数量int

在这里插入图片描述

2.准备工作

2.1创建表

创建表:gulivideo_ori,gulivideo_user_ori,
创建表:gulivideo_orc,gulivideo_user_orc

gulivideo_ori:

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;

gulivideo_user_ori:

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

把原始数据插入到 orc 表中
gulivideo_orc:

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>)
row format delimited fields terminated by "\t" 
collection items terminated by "&" 
stored as orc;

gulivideo_user_orc:

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

2.1导入 ETL 后的数据

gulivideo_ori:

load data inpath "/gulivideo/output/video/" into table gulivideo_ori;

gulivideo_user_ori:

load data inpath "/gulivideo/user" into table gulivideo_user_ori;

2.3向 ORC 表插入数据

gulivideo_orc:

insert into table gulivideo_orc select * from gulivideo_ori;

gulivideo_user_orc:

insert into table gulivideo_user_orc select * from gulivideo_user_ori;

3.业务分析

3.1统计视频观看数 Top10

思路:
使用 order by 按照 views 字段做一个全局排序即可,同时设置只显示前 10 条。

select
	 videoId, 
	 uploader, 
	 age, 
	 category, 
	 length, 
	 views, 
	 rate, 
	 ratings, 
	 comments 
from 
 	 gulivideo_orc 
order by 
 	views desc 
limit 
	 10;

结果:

dMH0bHeiRNg42513417
0XxI-hvPRRA20282464
1dmVU08zVpA16087899
RB-wUgnyGv015712924
QjA5faZF1A815256922
-_CSo1gOd4813199833
49IDp76kjPw11970018
tYnn51C3X_w11823701
pv5zWaTEVkI11672017
D2kJZOfq7zk11184051

3.2 统计视频类别热度 Top10

某类视频的个数作为视频类别热度
思路:
1.使用UDTF函数将类别列炸开
2.按照category_name进行分组,统计每种类别视频的总数,同时按照该总数进行倒序排名,取前10;
3.合并(嵌套)

1.使用UDTF函数将类别列炸开

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

2.按照category_name进行分组,统计每种类别视频的总数,同时按照该总数进行倒序排名,取前10;

select
    category_name,
    count(*) category_count
from
    t1
group by
    category_name
order by
    category_count desc
limit 10;

3.合并(嵌套)

select
    category_name,
    count(*) category_count
from
    (select
    videoId,
    category_name
from
    gulivideo_orc
lateral view explode(category) tmp_category as category_name)t1
group by
    category_name
order by
    category_count desc
limit 10;

结果:

Music179049
Entertainment127674
Comedy87818
Animation73293
Film73293
Sports67329
Gadgets59817
Games59817
Blogs48890
People48890

3.3统计出视频观看数最高的 20 个视频的所属类别以及类别包含Top20 视频的个数

思路:
1.统计视频观看数Top20。
2.对t1表中的category进行炸裂。
3.对t2表进行分组(category_name)求和(总数)
4.合并(嵌套)

1.统计视频观看数Top20

select
    videoId,
    views,
    category
from
    gulivideo_orc
order by
    views desc
limit 20;t1

2.对t1表中的category进行炸裂

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

3.对t2表进行分组(category_name)求和(总数)

select
    category_name,
    count(*) category_count
from
    t2
group by
    category_name
order by
    category_count desc;

4.合并(嵌套)

select
    category_name,
    count(*) category_count
from
    (select
    videoId,
    category_name
from
    (select
    videoId,
    views,
    category
from
    gulivideo_orc
order by
    views desc
limit 20)t1
lateral view explode(category) tmp_category as category_name)t2
group by
    category_name
order by
    category_count desc;

结果:

Entertainment6
Comedy6
Music5
People2
Blogs2
UNA1

3.4 统计视频观看数 Top50 所关联视频的所属类别 Rank

思路:
1.统计视频观看数Top50。
2.对t1表中的relatedId进行炸裂并去重。
3.取出观看数前50视频关联ID视频的类别。
4.对t3表中的category进行炸裂。
5.分组(类别)求和(总数)。
6.合并(嵌套)。

1.统计视频观看数Top50

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

2.对t1表中的relatedId进行炸裂并去重

select
    related_id
from
    t1
lateral view explode(relatedId) tmp_related as related_id
group by related_id;t2

3.取出观看数前50视频关联ID视频的类别

select
    category
from
    t2
join gulivideo_orc orc
on t2.related_id=orc.videoId;t3

4.对t3表中的category进行炸裂

select
    explode(category) category_name
from
    t3;t4

5.分组(类别)求和(总数)

select
    category_name,
    count(*) category_count
from
    t4
group by
    category_name
order by
    category_count desc;

6.合并(嵌套)

select
    category_name,
    count(*) category_count
from
    (select
    explode(category) category_name
from
    (select
    category
from
    (select
    related_id
from
    (select
    relatedId,
    views
from
    gulivideo_orc
order by
    views desc
limit 50)t1
lateral view explode(relatedId) tmp_related as related_id
group by related_id)t2
join gulivideo_orc orc
on t2.related_id=orc.videoId)t3)t4
group by
    category_name
order by
    category_count desc;

结果:

Comedy232
Entertainment216
Music195
Blogs51
People51
Film47
Animation47
News22
Politics22
Games20
Gadgets20
Sports19
Howto14
DIY14
UNA13
Places12
Travel12
Animals11
Pets11
Autos4
Vehicles4

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

Top10
思路:
1.统计上传视频最多的用户Top10。
2.取出这10个人上传的所有视频,按照观看次数进行排名,取前20。
3.合并(嵌套)

1.统计上传视频最多的用户Top10。

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

2.取出这10个人上传的所有视频,按照观看次数进行排名,取前20

select
    video.videoId,
    video.views
from
    t1
join
    gulivideo_orc video
on
    t1.uploader=video.uploader
order by
    views desc
limit 20;

3.合并(嵌套)

select
    video.videoId,
    video.views
from
    (select
    uploader,
    videos
from
    gulivideo_user_orc
order by
    videos desc
limit 10)t1
join
    gulivideo_orc video
on
    t1.uploader=video.uploader
order by
    views desc
limit 20;

3.7 统计每个类别中的视频热度Top10

思路:
1.给每一种类别根据视频观看数添加rank值(倒序)
2.过滤前十

1.给每一种类别根据视频观看数添加rank值(倒序)

select
    categoryId,
    videoId,
    views,
    rank() over(partition by categoryId order by views desc) rk
from
    gulivideo_category;

2.过滤前十

select
    categoryId,
    videoId,
    views
from
    (select
    categoryId,
    videoId,
    views,
    rank() over(partition by categoryId order by views desc) rk
from
    gulivideo_category)t1
where
    rk<=10;
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 要统计谷粒影音视频的热门视频,可以使用Hive进行数据分析和统计。以下是一些可能有用的Hive查询: 1. 统计所有视频的播放量,按照播放量从高到低排列: ``` SELECT video_id, COUNT(*) as play_count FROM video_play_records GROUP BY video_id ORDER BY play_count DESC; ``` 2. 统计最受欢迎的视频,按照总播放量从高到低排列: ``` SELECT video_id, SUM(play_count) as total_play_count FROM ( SELECT video_id, COUNT(*) as play_count FROM video_play_records GROUP BY video_id ) a GROUP BY video_id ORDER BY total_play_count DESC; ``` 3. 统计最近一周内播放量最高的视频,按照播放量从高到低排列: ``` SELECT video_id, COUNT(*) as play_count FROM video_play_records WHERE play_time >= DATE_SUB(CURRENT_TIMESTAMP(), 7) -- 最近一周 GROUP BY video_id ORDER BY play_count DESC; ``` 这些查询可以帮助我们找出谷粒影音视频中最热门的视频。当然,具体的查询语句和统计方法需要根据实际情况进行调整和优化。 ### 回答2: Hive是一个基于Hadoop的数据仓库工具,用于存储和分析大规模的结构化数据。要使用Hive统计谷粒影音热门视频,需要以下步骤: 1. 建立Hive表:首先,在Hive中创建一个表来存储谷粒影音的视频数据。可以定义表的字段,如视频ID、标题、发布日期、观看次数等。 2. 导入数据:将谷粒影音的视频数据导入Hive表中。可以使用Hive提供的LOAD命令或从其他数据源(如文件、数据库)导入数据。 3. 编写查询语句:使用Hive的查询语言HQL编写查询语句来统计热门视频。可以使用ORDER BY和LIMIT子句来获取观看次数最多的视频。例如,可以编写类似以下的查询语句: SELECT 视频ID, 标题, 观看次数 FROM 谷粒影音表 ORDER BY 观看次数 DESC LIMIT 10; 上述查询语句将按照观看次数降序排列视频,并返回观看次数最多的前10个视频的视频ID、标题和观看次数。 4. 运行查询:在Hive中执行查询语句,获得热门视频的统计结果。Hive会使用MapReduce或Tez等计算框架来处理大规模的数据。 5. 分析结果:根据查询的结果进行统计分析,可以了解谷粒影音中最受欢迎的视频,或者识别出观看次数较低的视频,并进行进一步的优化或调整。 通过以上步骤,可以使用Hive谷粒影音的视频数据进行统计,快速找出热门视频,为业务决策和推荐等方面提供支持。 ### 回答3: Hive是一个基于Hadoop的数据仓库基础结构,用于处理大规模数据集。 统计谷粒影音热门视频可以通过Hive进行实现。 首先,我们需要通过Hive创建一个与谷粒影音视频相关的表,包含视频的各种属性,例如视频ID,标题,上传时间,观看次数等等。这可以通过使用Hive的DDL(数据定义语言)来实现。 接下来,我们可以使用Hive数据操作语言(DML)来查询表中的数据,以统计热门视频。例如,我们可以使用类似以下的Hive查询语句: ``` SELECT video_id, title, views FROM video_table ORDER BY views DESC LIMIT 10; ``` 上述查询语句将从视频表中选择视频ID,标题和观看次数,并按观看次数降序排列。我们可以使用LIMIT关键字限制返回结果的数量,例如这里我们只返回前10个热门视频。 除了观看次数之外,还可以使用其他指标来确定热门视频,如点赞数、评论数等。我们可以根据需求修改查询语句以适应不同的统计需求。 最后,我们可以将查询结果导出到其他存储系统,如HDFS(Hadoop分布式文件系统)或RDBMS(关系型数据库管理系统),以便进一步分析或展示热门视频数据。 总而言之,通过Hive的DDL和DML语言,我们可以建立和查询谷粒影音视频表,然后根据不同的统计需求使用特定的查询语句,最后将结果导出到其他存储系统,从而实现热门视频的统计分析。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值