文章目录

  • 数据背景
  • 数据准备
    • 需求分析
    • 创建数据库及表
    • 加载数据
  • ETL数据清洗
  • 需求指标统计

数据背景

  • 陌陌作为聊天平台每天都会有大量的用户在线,会出现大量的聊天数据,通过对聊天数据的统计分析,可以更好的对用户构建精准的用户画像,为用户提供更好的服务以及实现高ROI的平台运营推广,给公司的发展决策提供精确的数据支撑。
  • 本实验所选用的数据均为虚拟数据,不会侵犯到用户隐私及敏感信息。

数据准备

需求分析

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

创建数据库及表

--创建数据库
create database db_msg;
--切换数据库
use db_msg;
--建表
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';

加载数据

  • 将数据传入HS2服务器目录/root/hivedata中
--加载数据到表中
load data local inpath '/root/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;

--统计行数
select count(*) as cnt from tb_msg_source;
--共有140465行

ETL数据清洗

  • ETL(Extract-Transform-Load缩写),用来描述将数据从来源端经过抽取(Extract)、转换(Transform)、加载(Load)至目的端的过程。ETL一词较常用在数据仓库中。
  • 在本次需求中我们需要过滤的脏数据主要有如下几个问题:
    • 当前数据中,有一些数据的字段为空,不是合法数据。
selectmsg_time,sender_name,sender_gps
from db_msg.tb_msg_source
where length(sender_gps) = 0
limit 10;

  • 需求中,需要统计每天、每个小时的消息量,但是数据中没有天和小时字段,只有整体时间字段,不好处理。
selectmsg_time
from db_msg.tb_msg_source
limit 10;

  • 需求中,需要对经度和维度构建地区的可视化地图,但是数据中GPS经纬度为一个字段不好处理。
selectsender_gps
from db_msg.tb_msg_source
limit 10;

  • ETL数据实现(采用CTAS语法建表)
create table db_msg.tb_msg_etl as
select*,substr(msg_time,0,10) as dayinfo, --获取天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 ;
  • 验证结果
selectmsg_time,dayinfo,hourinfo,sender_gps,sender_lng,sender_lat
from db_msg.tb_msg_etl
limit 10;

需求指标统计

  • 统计今日数据量
create table if not exists tb_rs_total_msg_cnt
comment "今日消息总量"
as
selectdayinfo,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
selectdayinfo,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
selectdayinfo,sender_gps,cast(sender_lng as double) as longitude, -- 转换为doublecast(sender_lat as double) as latitude, -- 转换为doublecount(*) 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
selectdayinfo,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
selectdayinfo,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;

  • 统计发送人的手机型号分布情况
create table if not exists tb_rs_sender_phone
comment "发送人的手机型号分布"
as
selectdayinfo,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
selectdayinfo,sender_os,count(distinct sender_account) as cnt
from tb_msg_etl
group by dayinfo,sender_os;
--结果验证
select * from tb_rs_sender_os;

基于Hive数仓的陌陌聊天数据需求开发相关推荐

  1. 基于hive数仓的游戏指标分析

    目录 一.分析指标数据 二.基础层数据处理 1.先把全部数据导入到HDFS中 2.创建一个外部表,将数据导入到hive中 3.分割txt文件中的数据 4.取出需要的值,并建表 5.检查数据日期 三.设 ...

  2. 大数据-案例-离线数仓-在线教育:MySQL(业务数据)-ETL(Sqoop)->Hive数仓【ODS层-数据清洗->DW层(DWD-统计分析->DWS)】-导出(Sqoop)->MySQL->可视化

    一.商业BI系统概述 商业智能系统,通常简称为商业智能系统,是商业智能软件的简称,是为提高企业经营绩效而采用的一系列方法.技术和软件的总和.通常被理解为将企业中的现有数据转换为知识并帮助企业做出明智的 ...

  3. Hive 老当益庄 | 深度解读 Flink 1.11:流批一体 Hive 数仓

    精选30+云产品,助力企业轻松上云!>>> 首先恭喜 Table/SQL 的 blink planner 成为默认 Planner,撒花.撒花. Flink 1.11 中流计算结合 ...

  4. Hive 数仓中常见的日期转换操作

    (1)Hive 数仓中一些常用的dt与日期的转换操作 下面总结了自己工作中经常用到的一些日期转换,这类日期转换经常用于报表的时间粒度和统计周期的控制中 日期变换: (1)dt转日期 to_date(f ...

  5. HIve数仓新零售项目DWD层的构建

    HIve数仓新零售项目 注:大家觉得博客好的话,别忘了点赞收藏呀,本人每周都会更新关于人工智能和大数据相关的内容,内容多为原创,Python Java Scala SQL 代码,CV NLP 推荐系统 ...

  6. Flink SQL 1.11新功能详解:Hive 数仓实时化 Flink SQL + CDC 实践

    问题导读 1.Flink 1.11 有哪些新功能? 2.如何使用 flink-cdc-connectors 捕获 MySQL 和 Postgres 的数据变更? 3.怎样利用 Flink SQL 做多 ...

  7. 大数据数仓项目总结(一)需求、技术选型、框架版本、服务器、集群规模

    文章目录 一.需求描述 1)项目大致需求 2)需考虑的问题 二.项目框架及选型 1.技术选型 2.项目架构与数据流程 3.框架版本选择 1)Hadoop发行版本选择 2)Apache框架版本具体型号 ...

  8. 离线数仓建设,企业大数据的业务驱动与技术实现丨03期直播回顾

    原文链接:离线数仓建设,企业大数据的业务驱动与技术实现丨03期直播回顾 视频回顾:点击这里 课件获取:点击这里 一.离线数仓建设背景 离线数据是相对实时数据而言的数据产出,不同于实时数据,离线数据一般 ...

  9. Hadoop(HDFS+MapReduce+Hive+数仓基础概念)学习笔记(自用)

    文章目录 修改虚拟机IP 复制网卡的配置 Vi编辑器的常用命令 实操部分 复制网卡的配置 Hadoop集群初体验 20.secondarynameNode如何辅助管理FSImage与Edits文件 ⭐ ...

最新文章

  1. docker 离线安装 mysql_docker 离线安装
  2. LA3902 Network (树上dfs)
  3. Android NDK开发——Android studio使用JNI调用OpenCV处理图像
  4. 今天开始SOA-阿里dubbo
  5. 前端开发面试题总结之——CSS3
  6. 玛纽尔扫地机器人怎样_扫地机器人怎样选?科沃斯超能王VS云鲸对比测试,看完你就懂了...
  7. SpiderMonkey
  8. MyBatis(六)SqlSessionTemplate是如何保证线程安全的
  9. Linux下交叉编译gdb和gdbserver
  10. javaweb---简易邮件发送
  11. 【转】1.C Task.CompletedTask和Task.Result小记
  12. php 遍历所有网站网址,使用selenium获取网址所加载所有资源url列表信息
  13. spring cloud全家桶_吃透这份Github点赞120k的Spring全家桶笔记Offer拿到手软
  14. 汇编代码调用main和分配内存
  15. 人工智能+人=强大的网络安全
  16. FreeBSD下nginx并支持php配置详解
  17. 桌面没有计算机图标6,我的电脑图标没了怎么办
  18. 读书学习:我编程我快乐(一.2)
  19. [淘宝商城首页]-图片灯箱明暗遮罩效果之jquery版
  20. vb.net同步服务器文件,vb.net - VB.NET - 如何以编程方式将身份验证传递给服务器 - 如何访问需要身份验证的服务器上的文件 - 堆栈内存溢出...

热门文章

  1. 常见布局技巧(margin负值的运用)
  2. Dubbo第一个程序
  3. MATLAB高斯-勒让德积分求解
  4. 网页网站—HTTP协议
  5. html转义字符 叹号,特殊符号感叹号
  6. NLB单播和多播区别
  7. 戏说PUBER之---LULU与绿猪的故事(1)
  8. 实战派 | Java项目中玩转Redis6.0客户端缓存
  9. 企业老总亲自回答:计算机视觉方向今年招聘情况怎么样?是否已经人才过剩?...
  10. 明泰风行N907震撼演绎