Hive 学习Demo

news2024/11/25 14:53:06
背景介绍

陌陌作为聊天平台每天都会有大量用户在线,会出现大量的聊天数据,通过对聊天数据分析,可以更好的构建精确的用户画像,为用户提供更好的服务以及实现高ROI(投资回报率)的平台运营推广,给公司的发展决策提供精确的数据支撑。

目标:
基于Hadoop和Hive实现聊天数据分析,构建聊天数据分析报表。

需求:
统计今日总消息量
统计今日每小时消息量、发送和接收用户数
统计今日各地区发送消息数据量
统计今日发送消息和接收消息的用户数
统计今日发送消息最多的top10用户
统计接收消息最多的top10用户
统计发送人的手机型号
统计发送人的设备操作系统分布

原始数据:
数据来源,聊天业务系统中到处的一天24小时的用户聊天数据,以tsv文本形式存储。
在这里插入图片描述

1、建库建表、加载数据

--------------1、建库-------------------

--如果数据库已存在就删除
drop database if exists db_msg cascade;
--创建数据库
create database db_msg;
--切换数据库
use db_msg;


--------------2、建表-------------------
--如果表已存在就删除
drop table if exists db_msg.tb_msg_source;
--建表
create table db_msg.tb_msg_source(
  msg_time             string  comment "消息发送时间"
  , sender_name        string  comment "发送人昵称"
  , sender_account     string  comment "发送人账号"
  , sender_sex         string  comment "发送人性别"
  , sender_ip          string  comment "发送人ip地址"
  , sender_os          string  comment "发送人操作系统"
  , sender_phonetype   string  comment "发送人手机型号"
  , sender_network     string  comment "发送人网络类型"
  , sender_gps         string  comment "发送人的GPS定位"
  , receiver_name      string  comment "接收人昵称"
  , receiver_ip        string  comment "接收人IP"
  , receiver_account   string  comment "接收人账号"
  , receiver_os        string  comment "接收人操作系统"
  , receiver_phonetype string  comment "接收人手机型号"
  , receiver_network   string  comment "接收人网络类型"
  , receiver_gps       string  comment "接收人的GPS定位"
  , receiver_sex       string  comment "接收人性别"
  , msg_type           string  comment "消息类型"
  , distance           string  comment "双方距离"
  , message            string  comment "消息内容"
)
--指定分隔符为制表符
row format delimited fields terminated by '\t';

--------------3、加载数据-------------------
--上传数据文件到node1服务器本地文件系统(HS2服务所在机器)
--shell:  mkdir -p /root/hivedata

--加载数据到表中
load data local inpath '/hivedata/data1.tsv' into table db_msg.tb_msg_source;
load data local inpath '/root/hivedata/data2.tsv' into table db_msg.tb_msg_source;

--查询表 验证数据文件是否映射成功
select * from tb_msg_source limit 10;

2、ETL数据清洗

抽取、转换、加载数据

数据问题:
当前数据中,有一些数据的字段为空,是否为合法数据?
合法和不合法有一个判断标准,这些字段是否有利于这次数据分析,是不是能够支撑你本次分析,如果该次分析不涉及该字段,则不用考虑该这段是否合法,要是设计该字段,那么为不合法数据。
在这里插入图片描述
使用where length()解决

在这里插入图片描述
将字段拆分解决
在这里插入图片描述
拆分字段解决。
针对以上问题,我们将字段拆分出来形成一张新表。使用CTAS语法

这样可以省去我们建表的步骤,直接将原表的字段进行操作形成新表。

create table 新表名
as select 字段... from 目标表名 where...



--ETL实现
--如果表已存在就删除
drop table if exists db_msg.tb_msg_etl;
--将Select语句的结果保存到新表中
create table db_msg.tb_msg_etl as
select
  *,
  substr(msg_time,0,10) as dayinfo, --获取天 2021-11-01
  substr(msg_time,12,2) as hourinfo, --获取小时
  split(sender_gps,",")[0] as sender_lng, --提取经度
  split(sender_gps,",")[1] as sender_lat --提取纬度
from db_msg.tb_msg_source
--过滤字段为空的数据
where length(sender_gps) > 0 ;

需求

需求:
统计今日总消息量
统计今日每小时消息量、发送和接收用户数
统计今日各地区发送消息数据量
统计今日发送消息和接收消息的用户数
统计今日发送消息最多的top10用户
统计接收消息最多的top10用户
统计发送人的手机型号
统计发送人的设备操作系统分布


--------------5、需求指标统计分析-------------------
--需求:统计今日总消息量
create table if not exists tb_rs_total_msg_cnt
comment "今日消息总量"  -- 表的注释
as
select
  dayinfo,
  count(*) as total_msg_cnt
from db_msg.tb_msg_etl
group by dayinfo;

select * from tb_rs_total_msg_cnt;--结果验证


--需求:统计今日每小时消息量、发送和接收用户数
create table if not exists tb_rs_hour_msg_cnt
comment "每小时消息量趋势"
as
select
  dayinfo,
  hourinfo,
  count(*) as total_msg_cnt,
  count(distinct sender_account) as sender_usr_cnt,
  count(distinct receiver_account) as receiver_usr_cnt
from db_msg.tb_msg_etl
group by dayinfo,hourinfo;

select * from tb_rs_hour_msg_cnt;--结果验证


--需求:统计今日各地区发送消息数据量
create table if not exists tb_rs_loc_cnt
comment "今日各地区发送消息总量"
as
select
  dayinfo,
  sender_gps,
  cast(sender_lng as double) as longitude,
  cast(sender_lat as double) as latitude,
  count(*) as total_msg_cnt
from db_msg.tb_msg_etl
group by dayinfo,sender_gps,sender_lng,sender_lat;

select * from tb_rs_loc_cnt; --结果验证


--需求:统计今日发送消息和接收消息的用户数
create table if not exists tb_rs_usr_cnt
comment "今日发送消息人数、接受消息人数"
as
select
  dayinfo,
  count(distinct sender_account) as sender_usr_cnt,
  count(distinct receiver_account) as receiver_usr_cnt
from db_msg.tb_msg_etl
group by dayinfo;

select * from tb_rs_usr_cnt; --结果验证


--需求:统计今日发送消息最多的Top10用户
create table if not exists tb_rs_susr_top10
comment "发送消息条数最多的Top10用户"
as
select
  dayinfo,
  sender_name as username,
  count(*) as sender_msg_cnt
from db_msg.tb_msg_etl
group by dayinfo,sender_name
order by sender_msg_cnt desc
limit 10;

select * from tb_rs_susr_top10; --结果验证


--需求:统计今日接收消息最多的Top10用户
create table if not exists tb_rs_rusr_top10
comment "接受消息条数最多的Top10用户"
as
select
  dayinfo,
  receiver_name as username,
  count(*) as receiver_msg_cnt
from db_msg.tb_msg_etl
group by dayinfo,receiver_name
order by receiver_msg_cnt desc
limit 10;

select * from tb_rs_rusr_top10;  --结果验证


--需求:统计发送人的手机型号分布情况
create table if not exists tb_rs_sender_phone
comment "发送人的手机型号分布"
as
select
  dayinfo,
  sender_phonetype,
  count(distinct sender_account) as cnt
from tb_msg_etl
group by dayinfo,sender_phonetype;

select * from tb_rs_sender_phone; --结果验证


--需求:统计发送人的设备操作系统分布情况
create table if not exists tb_rs_sender_os
comment "发送人的OS分布"
as
select
  dayinfo,
  sender_os,
  count(distinct sender_account) as cnt
from tb_msg_etl
group by dayinfo,sender_os;

select * from tb_rs_sender_os;  --结果验证

Fine BI

fine BI 是帆软软件公司的一款商业智能(business Intelligence)产品,定位于自助大数据分析BI工具,能够帮助企业的业务人员和数据分析师开展以问题为导向的探索式分析。

就是一个可以集成hive可视化软件,将hive中的数据展示出来,这款软件有很多模板使用。

这个没啥好记录的,不同公司使用的软件不同。

学习总结:
学习了hadoop,这个主要是搭建环境,其他的底层执行逻辑稍微明白一些就行,不影响使用。
然后学习了hive,这个主要和hadoop集成使用,主要目的就是将结构化的文件转换为数据表。然后一些sql的使用。
最后这个demo呢,就是使用Fine BI将上面的数据读取出来,做成可视化图表展示。

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

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

相关文章

智能网联汽车渗透率变化图显示预计

IDC 于 2020 年最新发布的《全球智能网 联汽车预测报告(2020-2024)》数据显示,尽管受新冠肺炎疫情冲击,2020 年全球智能网联汽车出货量预计较上一年下滑 10.6%,约为 4440 万辆,但到 2024 年全球智能网联汽车…

广播机制基础知识

广播机制 1.广播机制 1.1概述 1.1.1引入 1.广播的生活案例 记得以前读书的时候,每个班级都会有一个挂在墙上的大喇叭,用来广播一些通知,比如,开学要去搬书,广播: "每个班级找几个同学教务处拿书"…

商业智能BI与业务结构分析

做商业智能BI还必须熟悉行业和业务知识,不结合行业业务知识,商业智能BI的项目是很难落地的。商业智能BI的本质其实是企业的业务和管理思维的落地。企业的高层、业务部门的管理人员为什么要通过商业智能BI去看报表,他们看的是什么,…

深度学习-吴恩达(C3)结构化你的机器学习工程

结构化你的机器学习工程改变了深度学习的错误 比如你分割数据的方法,分割成train,development(dev)或叫valid,test,所以最好的实践方法是什么?了解更多端对端的深度学习,进而了解到你是否需要使用它&#…

Elasticsearch 核心技术(三):Kibana 安装、配置、运行(Windows 版)

❤️ 个人主页:水滴技术 🚀 支持水滴:点赞👍 收藏⭐ 留言💬 🌸 订阅专栏:大数据核心技术从入门到精通 文章目录一、下载 Kibana二、安装 Kibana三、配置 Kibana1. 主机名2. 端口3. Elasticsea…

Spark基础入门----框架概述

Spark Spark 框架概述 Spark 诞生背景 Apache Spark是用于大规模数据处理的统一分析引擎 Spark 最早源于一片论文,该论文是由加州大学柏克莱分校的Matei Zaharia等人发表。论文中提出了一种弹性分布式数据集(RDD)的概念。 总的说,Spark借鉴了Map Red…

Android进阶——sdk开发和apk开发有什么区别?

sdk SDK 就是 Software Development Kit 的缩写,中文意思就是“软件开发工具包”。即辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做“SDK”。 apk APK(全称:Android application package,Android应用程序包&#…

【重学Javase】—— 数组(从头剖析一维数组,二维数组,array常用工具类以及数组的两种常见异常)

目录 数组的概述 1、数组的理解: 2、数组的特点: 3、数组的分类: 一维数组 1、一维数组的声明与初始化 2、一维数组元素的引用:通过角标的方式调用 3、数组的属性:length 4、一维数组的遍历(for循…

mysql 备份还原数据库,java使用Runtime对象执行mysqldump备份数据库

为了提高系统可用性,通过java写定时任务每天晚上定时备份mysql数据库,然后把备份的.sql文件(建议在压缩一次上传,减少文件体积提高传输效率)调用文件上传服务器提供的文件上传接口上传到文件服务器,达到数据库服务器损坏后快速还原数据库的目的。以windows系统为例。linux注…

high-resolution image synthesis with latent diffusion models

如何通俗理解扩散模型? - 知乎泻药。实验室最近人人都在做扩散,从连续到离散,从CV到NLP,基本上都被diffusion洗了一遍。但是观察发现,里面的数学基础并不是模型应用的必须。其实大部分的研究者都不需要理解扩散模型的数…

理解linux虚拟网络设备veth

理解linux虚拟网络设备veth 上一章介绍了linux network namespace,接着来讨论一下如何让一个独立的网络命名空间的和主机的网络相互通信,这里我们需要用到linux虚拟网络设备veth。 veth设备 veth设备总是成对出现,通常就是用来连接不同网络命名空间(下面开始简称…

基于线性表的图书管理系统实验报告

目录 基于线性表的图书管理系统实验报告 1、成员分工 2、数据字典 3、抽象数据类型定义 4、图书存储结构描述 5、基本操作的算法描述 6、测试 6.1测试数据集 6.2测试程序运行结果截图 7、存在的问题与思考 基于线性表的图书管理系统实验报告 组长:xxx 组…

2022年学习机器人和人工智能的一些体会

前些日子开会,很受启发,比如有大佬指出: 总结:一般是高屋建瓴,通常是级别高的总揽全局,小虾虾不适用;感想和体会:小虾虾们学习完大佬讲话之后,自己的收获。 这才发现写博…

CRM能给企业带来什么价值

对于任何企业而言,客户都是企业生存下去的根本,管理客户也是企业一直在做的事情,有的企业尝试采用CRM来管理客户,有的企业还在观望CRM能给企业带来什么价值。 前言 对于任何企业而言,客户都是企业生存下去的根本&…

如何增加3d渲染的逼真感?提高3d渲染真实感的技巧

照片写实主义是一种艺术,它需要图形媒体来创造独特的艺术品,看起来非常有说服力。专业艺术家研究图像并使用照片写实技术从中创作艺术品。真实感可以在 2D 和 3D 渲染中实现,该过程称为真实感渲染。专业人士倾向于使用智能渲染过程&#xff0…

管理员权限功能和开机自启功能

前言 开机启动功能在Window下是很重要的一个功能,很多程序它都需要这样的功能 一.VS的配置选项(以管理员权限启动程序) 作用:用户在点击任务栏窗口等需要管理员权限时不会没有响应。 二.开机自启动(注册表&#xff…

解决Navicat打开表的速度慢的问题

前言 最近使用Navicat打开表或者设计表都很慢,需要等十几秒才能打开,一开始我以为是我电脑老了,配置比较差,慢点就慢点吧,好像慢的也比较合理,想到这里我也就没有追究先忍了。 但是这几天公司给我配置的新…

PriorityQueue详解

目录标题前言PriorityQueue特点API构造操作API底层显示:数组offer(E e)前言 PriorityQueue是优先队列,作用是保证每次取出的元素都是队列中权值最小的,这里涉及到了大小关系,元素大小的评判可以通过元素自身的自然顺序&#xff0…

手把手教你搭建环境和内核编译

环境搭建--安装Debian7.3 本系列文章假设读者已对linux有一定的了解,其实学习linux内核不需要有很深的关于linux的知识,只需要了解以下内容:linux基础知识及基本shell命令;现代操作系统的基本概念;C语言和gcc基本使用…

Python操作数据库及Python实现mysql数据库连接池源代码

简介 pymysql:纯Python实现的一个驱动。因为是纯Python编写的,因此执行效率不如MySQL-python。并且也因为是纯Python编写的,因此可以和Python代码无缝衔接。 MySQL Connector/Python:MySQL官方推出的使用纯Python连接MySQL的驱动…