当前位置:   article > 正文

大数据之陌陌聊天数据分析案例_data1.tsv

data1.tsv

目录

目标需求

数据内容

基于Hive数仓实现需求开发

1.建库建表、加载数据

2.ETL数据清洗

3需求指标统计


目标需求

基于Hadoop和hive实现聊天数据统计分析,构建聊天数据分析报表

1.统计今日总消息量

2.统计今日每小时消息量,发送和接收用户数

3.统计今日各地区发送消息数据量

4.统计今日发送消息和接收消息的用户数

5.统计发送消息最多的top10用户

6.统计接收消息最多的top10用户

7.统计发送人的手机型号分部情况

8.统计发送人的设备操作系统分布情况

数据内容

数据来源:聊天业务系统中导出的2021年11月01日的一天24小时的用户聊天数据,以TSV文本形式存储在文件中

数据大小:两个文件共14万条

列分隔符:制表符‘\t’

数据字典及样列数据:

基于Hive数仓实现需求开发

1.建库建表、加载数据

  1. --------------1、建库-------------------
  2. --如果数据库已存在就删除
  3. drop database if exists db_msg cascade;
  4. --创建数据库
  5. create database db_msg;
  6. --切换数据库
  7. use db_msg;
  8. --------------2、建表-------------------
  9. --如果表已存在就删除
  10. drop table if exists db_msg.tb_msg_source;
  11. --建表
  12. create table db_msg.tb_msg_source(
  13. msg_time string comment "消息发送时间"
  14. , sender_name string comment "发送人昵称"
  15. , sender_account string comment "发送人账号"
  16. , sender_sex string comment "发送人性别"
  17. , sender_ip string comment "发送人ip地址"
  18. , sender_os string comment "发送人操作系统"
  19. , sender_phonetype string comment "发送人手机型号"
  20. , sender_network string comment "发送人网络类型"
  21. , sender_gps string comment "发送人的GPS定位"
  22. , receiver_name string comment "接收人昵称"
  23. , receiver_ip string comment "接收人IP"
  24. , receiver_account string comment "接收人账号"
  25. , receiver_os string comment "接收人操作系统"
  26. , receiver_phonetype string comment "接收人手机型号"
  27. , receiver_network string comment "接收人网络类型"
  28. , receiver_gps string comment "接收人的GPS定位"
  29. , receiver_sex string comment "接收人性别"
  30. , msg_type string comment "消息类型"
  31. , distance string comment "双方距离"
  32. , message string comment "消息内容"
  33. )
  34. --指定分隔符为制表符
  35. row format delimited fields terminated by '\t';
  36. --------------3、加载数据-------------------
  37. --上传数据文件到node1服务器本地文件系统(HS2服务所在机器)
  38. --shell: mkdir -p /root/hivedata
  39. --加载数据到表中
  40. load data local inpath '/root/hivedata/data1.tsv' into table db_msg.tb_msg_source;
  41. load data local inpath '/root/hivedata/data2.tsv' into table db_msg.tb_msg_source;
  42. --查询表 验证数据文件是否映射成功
  43. select * from tb_msg_source limit 10;
  44. --统计行数
  45. select count(*) as cnt from tb_msg_source;

2.ETL数据清洗

  1. --------------4、ETL数据清洗-------------------
  2. --问题1:当前数据中,有一些数据的字段为空,不是合法数据
  3. select
  4. msg_time,
  5. sender_name,
  6. sender_gps
  7. from db_msg.tb_msg_source
  8. where length(sender_gps) = 0
  9. limit 10;
  10. --问题2:需求中,需要统计每天、每个小时的消息量,但是数据中没有天和小时字段,只有整体时间字段,不好处理
  11. select
  12. msg_time
  13. from db_msg.tb_msg_source
  14. limit 10;
  15. --问题3:需求中,需要对经度和维度构建地区的可视化地图,但是数据中GPS经纬度为一个字段,不好处理
  16. select
  17. sender_gps
  18. from db_msg.tb_msg_source
  19. limit 10;
  20. --ETL实现
  21. --如果表已存在就删除
  22. drop table if exists db_msg.tb_msg_etl;
  23. --将Select语句的结果保存到新表中
  24. create table db_msg.tb_msg_etl as
  25. select
  26. *,
  27. substr(msg_time,0,10) as dayinfo, --获取天
  28. substr(msg_time,12,2) as hourinfo, --获取小时
  29. split(sender_gps,",")[0] as sender_lng, --提取经度
  30. split(sender_gps,",")[1] as sender_lat --提取纬度
  31. from db_msg.tb_msg_source
  32. --过滤字段为空的数据
  33. where length(sender_gps) > 0 ;
  34. --验证ETL结果
  35. select
  36. msg_time,dayinfo,hourinfo,sender_gps,sender_lng,sender_lat
  37. from db_msg.tb_msg_etl
  38. limit 10;

3需求指标统计

  1. --------------5、需求指标统计分析-------------------
  2. --需求:统计今日总消息量
  3. create table if not exists tb_rs_total_msg_cnt
  4. comment "今日消息总量"
  5. as
  6. select
  7. dayinfo,
  8. count(*) as total_msg_cnt
  9. from db_msg.tb_msg_etl
  10. group by dayinfo;
  11. select * from tb_rs_total_msg_cnt;--结果验证
  12. --需求:统计今日每小时消息量、发送和接收用户数
  13. create table if not exists tb_rs_hour_msg_cnt
  14. comment "每小时消息量趋势"
  15. as
  16. select
  17. dayinfo,
  18. hourinfo,
  19. count(*) as total_msg_cnt,
  20. count(distinct sender_account) as sender_usr_cnt,
  21. count(distinct receiver_account) as receiver_usr_cnt
  22. from db_msg.tb_msg_etl
  23. group by dayinfo,hourinfo;
  24. select * from tb_rs_hour_msg_cnt;--结果验证
  25. --需求:统计今日各地区发送消息数据量
  26. create table if not exists tb_rs_loc_cnt
  27. comment "今日各地区发送消息总量"
  28. as
  29. select
  30. dayinfo,
  31. sender_gps,
  32. cast(sender_lng as double) as longitude,
  33. cast(sender_lat as double) as latitude,
  34. count(*) as total_msg_cnt
  35. from db_msg.tb_msg_etl
  36. group by dayinfo,sender_gps,sender_lng,sender_lat;
  37. select * from tb_rs_loc_cnt; --结果验证
  38. --需求:统计今日发送消息和接收消息的用户数
  39. create table if not exists tb_rs_usr_cnt
  40. comment "今日发送消息人数、接受消息人数"
  41. as
  42. select
  43. dayinfo,
  44. count(distinct sender_account) as sender_usr_cnt,
  45. count(distinct receiver_account) as receiver_usr_cnt
  46. from db_msg.tb_msg_etl
  47. group by dayinfo;
  48. select * from tb_rs_usr_cnt; --结果验证
  49. --需求:统计今日发送消息最多的Top10用户
  50. create table if not exists tb_rs_susr_top10
  51. comment "发送消息条数最多的Top10用户"
  52. as
  53. select
  54. dayinfo,
  55. sender_name as username,
  56. count(*) as sender_msg_cnt
  57. from db_msg.tb_msg_etl
  58. group by dayinfo,sender_name
  59. order by sender_msg_cnt desc
  60. limit 10;
  61. select * from tb_rs_susr_top10; --结果验证
  62. --需求:统计今日接收消息最多的Top10用户
  63. create table if not exists tb_rs_rusr_top10
  64. comment "接受消息条数最多的Top10用户"
  65. as
  66. select
  67. dayinfo,
  68. receiver_name as username,
  69. count(*) as receiver_msg_cnt
  70. from db_msg.tb_msg_etl
  71. group by dayinfo,receiver_name
  72. order by receiver_msg_cnt desc
  73. limit 10;
  74. select * from tb_rs_rusr_top10; --结果验证
  75. --需求:统计发送人的手机型号分布情况
  76. create table if not exists tb_rs_sender_phone
  77. comment "发送人的手机型号分布"
  78. as
  79. select
  80. dayinfo,
  81. sender_phonetype,
  82. count(distinct sender_account) as cnt
  83. from tb_msg_etl
  84. group by dayinfo,sender_phonetype;
  85. select * from tb_rs_sender_phone; --结果验证
  86. --需求:统计发送人的设备操作系统分布情况
  87. create table if not exists tb_rs_sender_os
  88. comment "发送人的OS分布"
  89. as
  90. select
  91. dayinfo,
  92. sender_os,
  93. count(distinct sender_account) as cnt
  94. from tb_msg_etl
  95. group by dayinfo,sender_os;
  96. select * from tb_rs_sender_os; --结果验证

FIneBI可视化报表

构建可视化报表

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/710018
推荐阅读
相关标签
  

闽ICP备14008679号