hive实战案例讲解

news2024/11/27 8:41:12

系列文章目录

hive进阶——在centos7里面配置mysql,将原来hive的客户端扩展

centos集群上安装hive客户端的操作步骤以及hive介绍

文章目录

Hive 实战

1、需求描述

2、数据结构

1)视频表

2)用户表

3、准备工作

3.1、准备表

3.2、创建原始数据表

3.3、 创建orc 存储格式带snappy 压缩的表

4、业务统计

4.1、统计视频观看数Top10

4.2、统计视频类别热度Top10

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

4.4 统计视频观看数Top50 所关联视频的所属类别排序

4.5 统计每个类别中的视频热度Top10,以Music 为例

4.6 统计每个类别视频观看数Top10

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


前言

本文主要介绍hive的一个案例实战,以及相关hive语句的书写,案例仅供参考。

Hive 实战

1、需求描述

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

  • -- 统计视频观看数Top10
  • -- 统计视频类别热度Top10
  • -- 统计出视频观看数最高的20 个视频的所属类别以及类别包含Top20 视频的个数
  • -- 统计视频观看数Top50 所关联视频的所属类别排序
  • -- 统计每个类别中的视频热度Top10,以Music 为例
  • -- 统计每个类别视频观看数Top10
  • -- 统计上传视频最多的用户Top10 以及他们上传的视频观看次数在前20 的视频

2、数据结构

1)视频表

视频表

2)用户表

用户表

3、准备工作

3.1、准备表

1)需要准备的表

创建原始数据表:gulivideo_ori,gulivideo_user_ori,
创建最终表:gulivideo_orc,gulivideo_user_orc

3.2、创建原始数据表

(1)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;

(2)创建原始数据表: gulivideo_user_ori

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

3.3、 创建orc 存储格式带snappy 压缩的表

(1)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>)
stored as orc
tblproperties("orc.compress"="SNAPPY");

(2)gulivideo_user_orc

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

(3)向ori 表插入数据

load data local inpath "/opt/module/data/video" into table gulivideo_ori;
load data local inpath "/opt/module/user" into table gulivideo_user_ori;

(4)向orc 表插入数据

insert into table gulivideo_orc select * from gulivideo_ori;
insert into table gulivideo_user_orc select * from gulivideo_user_ori;

补充:创建 orc 存储 格式 带 snappy 压缩 的 表

在Hive中,可以使用以下语句创建一个存储格式为ORC,并且采用Snappy压缩的表:

CREATE TABLE table_name(
  column1 data_type,
  column2 data_type,
  ...
)
STORED AS ORC
TBLPROPERTIES("orc.compress"="SNAPPY");

其中,table_name表示表名,column1、column2等表示表中的列名和对应的数据类型。STORED AS ORC表示存储格式为ORC,TBLPROPERTIES("orc.compress"="SNAPPY")表示采用Snappy压缩。

需要注意的是,创建ORC表时,如果需要使用Snappy压缩,需要先确保Hive的配置文件中开启了Snappy压缩,可以在hive-site.xml文件中添加如下配置信息:

<property>
  <name>hive.exec.compress.output</name>
  <value>true</value>
</property>
<property>
  <name>hive.exec.compress.intermediate</name>
  <value>true</value>
</property>
<property>
  <name>hive.exec.compress.result</name>
  <value>true</value>
</property>
<property>
  <name>mapreduce.map.output.compress.codec</name>
  <value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>
<property>
  <name>mapreduce.output.fileoutputformat.compress.codec</name>
  <value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>

这样,在创建ORC表时,就可以使用Snappy压缩了。

4、业务统计

4.1、统计视频观看数Top10

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

SELECT videoId,views
FROM gulivideo_orc
ORDER BY views DESC
LIMIT 10;

4.2、统计视频类别热度Top10

思路:
(1)即统计每个类别有多少个视频,显示出包含视频最多的前10 个类别。
(2)我们需要按照类别group by 聚合,然后count 组内的videoId 个数即可。
(3)因为当前表结构为:一个视频对应一个或多个类别。所以如果要group by 类别,
需要先将类别进行列转行(展开),然后再进行count 即可。
(4)最后按照热度排序,显示前10 条。
最终代码:

SELECT t1.category_name ,COUNT(t1.videoId) hot
FROM (SELECT videoId,category_name
      FROM gulivideo_orc
      lateral VIEW explode(category) gulivideo_orc_tmp AS category_name
      ) t1
GROUP BY t1.category_name
ORDER BY hot DESC
LIMIT 10;

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

思路:
(1)先找到观看数最高的20 个视频所属条目的所有信息,降序排列
(2)把这20 条信息中的category 分裂出来(列转行)
(3)最后查询视频分类名称和该分类下有多少个Top20 的视频
最终代码:

SELECTt2.category_name,COUNT(t2.videoId) video_sum
FROM (SELECT t1.videoId,category_name
      FROM (SELECT videoId,views ,category
            FROM gulivideo_orc
            ORDER BY views DESC
            LIMIT 20) t1
      lateral VIEW explode(t1.category) t1_tmp AS category_name) t2
GROUP BY t2.category_name

4.4 统计视频观看数Top50 所关联视频的所属类别排序

代码:

SELECT t6.category_name,t6.video_sum,
rank() over(ORDER BY t6.video_sum DESC ) rk
FROM (
SELECT t5.category_name,
COUNT(t5.relatedid_id) video_sum
FROM (
SELECT t4.relatedid_id,category_name
FROM (
SELECT t2.relatedid_id ,
t3.category
FROM (
SELECT
relatedid_id
FROM (
SELECT videoId,views,relatedid
FROM gulivideo_orc
ORDER BY views DESC
LIMIT 50
)t1
lateral VIEW explode(t1.relatedid) t1_tmp AS relatedid_id
)t2
JOIN gulivideo_orc t3 ON t2.relatedid_id = t3.videoId
) t4
lateral VIEW explode(t4.category) t4_tmp AS category_name
) t5
GROUP BY t5.category_name
ORDER BY video_sum DESC
) t6

4.5 统计每个类别中的视频热度Top10,以Music 为例

思路:
(1)要想统计Music 类别中的视频热度Top10,需要先找到Music 类别,那么就需要将
category 展开,所以可以创建一张表用于存放categoryId 展开的数据。
(2)向category 展开的表中插入数据。
(3)统计对应类别(Music)中的视频热度。
统计Music 类别的Top10(也可以统计其他)

SELECT t1.videoId,t1.views,t1.category_name
FROM (
SELECT videoId,views,category_name
FROM gulivideo_orc
lateral VIEW explode(category) gulivideo_orc_tmp AS category_name
)t1
WHERE t1.category_name = "Music"
ORDER BY t1.views DESC
LIMIT 10

4.6 统计每个类别视频观看数Top10

最终代码:

SELECT t2.videoId,t2.views,t2.category_name,t2.rk
FROM (
SELECT t1.videoId,t1.views,t1.category_name,
rank() over(PARTITION BY t1.category_name ORDER BY t1.views DESC ) rk
FROM (
SELECT videoId,views,category_name
FROM gulivideo_orc
lateral VIEW explode(category) gulivideo_orc_tmp AS category_name
)t1
)t2
WHERE t2.rk <=10

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

思路:
(1)求出上传视频最多的10 个用户
(2)关联gulivideo_orc 表,求出这10 个用户上传的所有的视频,按照观看数取前20
最终代码:

SELECT t2.videoId,t2.views,t2.uploader
FROM (
SELECT uploader,videos
FROM gulivideo_user_orc
ORDER BY videos DESC
LIMIT 10
) t1
JOIN gulivideo_orc t2 ON t1.uploader = t2.uploader
ORDER BY t2.views DESCLIMIT 20

总结

以上就是今天的内容~

最后欢迎大家点赞👍,收藏⭐,转发🚀,
如有问题、建议,请您在评论区留言💬哦。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/598291.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于ATMEGA16单片机的空调控制器

点击链接获取Keil源码与Project Backups仿真图&#xff1a; https://download.csdn.net/download/qq_64505944/87853101 源码获取 主要内容&#xff1a; 本系统采用AVR单片机实现汽车空调的自动控制&#xff08;双位控制&#xff09;&#xff0c;具有电路结构简单、分立元件…

【大数据基石】Hadoop环境搭建

文章目录 前言配置hosts关闭防火墙配置SSH免密下载Hadoop解压Hadoop到指定目录添加环境变量修改Hadoop配置文件core-site.xmlhdfs-site.xmlyarn-site.xmlmapred-site.xmlworkershadoop-env.sh 其他2台服务器也这样配置初始化NameNode启动hdfs启动Yarn启动历史记录服务器 ✨这里…

[中间件漏洞]tomcat漏洞复现

目录 Tomcat 远程代码执行漏洞&#xff08;CVE-2017-12615&#xff09; 漏洞描述 漏洞原理 漏洞复现 漏洞修复 tomcat弱口令&war远程部署 漏洞原理 漏洞复现 漏洞修复 Apache Tomcat文件包含漏洞(CVE-2020-1938&#xff09; 漏洞复现 漏洞修复 Tomcat 远程代码执行漏洞…

ffmpeg之AVFormatContext详细解释

AVFormatContext 作用 AVFormatContext主要起到了管理和存储媒体文件相关信息的作用。它是一个比较重要的结构体&#xff0c;在FFmpeg中用于表示媒体文件的格式上下文&#xff0c;其中包含了已经打开的媒体文件的详细信息&#xff0c;包括媒体文件的格式、媒体流的信息、各个媒…

1 行代码开启「密钥检测」,给敏感数据加上防护锁

&#x1f4a1; 近日&#xff0c;在「DevSecOps 软件安全开发实践」课程上&#xff0c;极狐(GitLab) 高级专业服务交付工程师韩飞、极狐(GitLab) 前端工程师任治桐&#xff0c;分享了密钥检测的背景、应用及处理&#xff0c;并演示了极狐GitLab 密钥检测功能&#xff0c;快用 1 …

视频文件损坏无需再苦恼!快速修复方法分享!

如今录制视频或者从互联网下载视频都很简单&#xff0c;这些视频可以从笔记本电脑、电视甚至智能手机上用于观看或上传到自媒体平台/社交平台。 但视频有时会出现损坏的问题&#xff0c;导致视频无法正常播放&#xff0c;出现这种情况怎么办&#xff1f; 导致视频文件损坏的原…

家居购项目 1.分页导航 2.购物车 3.订单生成

文章目录 &#x1f400;Java后端经典三层架构&#x1f407;MVC模型&#x1f407;开发环境搭建&#x1f407;会员注册&#x1f333;前端验证用户注册信息&#x1f333;思路分析&#x1f349;创建表&#x1f349;创建实体类&#x1f349;DAO&#x1f34c;MemberDAOImpl &#x1f…

怎么编辑pdf里面的文字?好用工具分享

PDF文件是一种非常常见的电子文档格式&#xff0c;它具有通用性、易分享、易打印的特点&#xff0c;因此广泛应用于各个领域中。然而&#xff0c;PDF文件通常是只读的&#xff0c;如果需要修改其中的文字&#xff0c;就需要使用专业的PDF编辑软件或者在线编辑工具。 市场上有很…

cuda编程学习——原子函数(十)

前言 参考资料&#xff1a; 高升博客 《CUDA C编程权威指南》 以及 CUDA官方文档 CUDA编程&#xff1a;基础与实践 樊哲勇 文章所有代码可在我的GitHub获得&#xff0c;后续会慢慢更新 文章、讲解视频同步更新公众《AI知识物语》&#xff0c;B站&#xff1a;出门吃三碗饭 …

文心一言 VS 讯飞星火 VS chatgpt (28)-- 算法导论5.1 3题

三、假设你希望以1/2的概率输出0与 1。你可以自由使用一个输出0或1的过程 BIASED-RANDOM。它以某概率 p 输出1&#xff0c;概率 1-p 输出0&#xff0c;其中 0<p<1 &#xff0c;但是 p 的值未知。请给出一个利用 BIASED-RANDOM 作为子程序的算法&#xff0c;返回一个无偏的…

pwm led

PWM Dimming (脉冲宽度调制) 调光——是一种利用简单的数字脉冲&#xff0c;反复开关灯光LED驱动器的调光技术。通过程序控制输出宽、窄不同的数字式脉冲&#xff0c;即可简单地实现改变输出电流&#xff08;电压&#xff09;&#xff0c;从而调节LED灯的亮度。 当PWM不是满占空…

真无线蓝牙耳机哪个牌子好用?六款真无线蓝牙耳机品牌推荐

无论我们是看视频还是在路上听音乐&#xff0c;真无线蓝牙耳机可以丰富我们的一天。然而&#xff0c;问题是有太多的选择&#xff0c;许多人不知道哪一款的性价比高音质好&#xff0c;下面小编特意整理了一期性价比高音质好的蓝牙耳机。 第一款&#xff1a;南卡小音舱lite2 蓝…

运维小白必学篇之基础篇第一集:Linux相关命令实验

Linux相关命令实验 实验者&#xff1a;胡 阳 命令提示符 【rootlocalhost ~】# 【当前登录系统的用户主机名 当前工作目录】提示符 &#xff08;# 表示 管理员&#xff09; &#xff08;&#xff04; 表示 普通用户&#xff09; 基本格式&#xff1a;命令 【选项】 【…

一文带你学习前端 - 自动化测试

theme: devui-blue 前端自动化测试 1. 自动化测试基本概念介绍 前言 一般我们实现功能&#xff0c;基本都是两部分写代码&#xff0c;调试/测试。写代码和测试的时间&#xff0c;基本都是55分。如果是测试逻辑&#xff0c;可能要打一下log&#xff0c;或者打断点去调试。测…

行业报告 | 工业机器视觉深度报告——兼具高成长和成熟技术的AI应用赛道

原创 | 文 BFT机器人 01 核心要点 核心观点: 工业机器视觉是高技术壁垒、商业模式成熟、国产替代迅速、行业快速发展的优秀赛道。行业端&#xff1a;3C电子是最主要的行业&#xff0c;新能源行业增速最快&#xff0c;受益于质量管控政策和行业高增速。技术端&#xff1a;大模型…

让工作效率提升10倍:十大AIGC工具评测

AI技术的普及已经在近年来不断增长。这种技术已经改变了我们与电脑的互动方式&#xff0c;让我们能够更高效、更自然地完成任务。本文将展示10个基于ChatGPT和GPT-3 AI模型构建的最强大的资源&#xff0c;使您更容易充分利用它们的潜力。因此&#xff0c;如果您想利用AI技术改进…

DiscoTOC - 自动内容表格

示例 桌面 移动终端 特性 toc table of contents&#xff08;内容列表&#xff09; 通过菜单上面的设置按钮&#xff0c;根据当前内容的状况一键生成 toc 列表Toc 将会一直在页面中尽显显示 —— 滚动内容与 topic 的链接是同步的当你滚动过当前页面中中的主题的时候&#…

Python numpy - 数组的创建与访问

目录 一 数组array的创建途径 1 列表list 2 函数array 3 函数arange 4 函数zeros 5 函数eyes 6 随机函数randn/ randint 二 数组array的访问 1 访问形状/元素个数/数据类型 2 访问一维数组的位置/范围 3 访问二维数组的位置/范围 4 用&#xff1a;访问二维数组的…

美国餐饮连锁集团【CAVA Group】申请纽交所IPO上市

来源&#xff1a;猛兽财经 作者&#xff1a;猛兽财经 猛兽财经获悉&#xff0c;来自美国的餐饮连锁集团【CAVA Group】近期已向美国证券交易委员会&#xff08;SEC&#xff09;提交招股书&#xff0c;申请在纽交所IPO上市&#xff0c;股票代码为(CAVA) &#xff0c;CAVA Group…

基于SSM的疫情物资管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…