原始数据内容
数据来源: 聊天业务系统中导出的2021年11月01日一天24小时的用户聊天数据,以TSV文本形式存储在文件中
ETL数据清洗
数据问题
问题1:当前数据中,有一些数据的字段为空,不是合法数据

  1. select msg_time,sender_name,sender_gps from db_msg.tb_msg_source where length(sender_gps) = 0 limit 10;

image.png
问题2:需求中,需要统计每天、每个小时的消息量,但是数据中没有天和小时字段,只有整体时间字段,不好处理

  1. select msg_time from db_msg.tb_msg_source limit 10;

image.png image.png
问题3:需求中,需要对经度和维度构建地区的可视化地图,但是数据中GPS经纬度为一个字段,不好处理

  1. select sender_gps from db_msg.tb_msg_source limit 10;

ETL需求 :

需求1:对字段为空的不合法数据进行过滤 • Where过滤
需求2:通过时间字段构建天和小时字段 • Substr函数
需求3:从GPS的经纬度中提取经度和维度 • Split函数
需求4:将ETL以后的结果保存到一张新的Hive表中 • Create table …… as select ……

ETL实现 :

—如果表已存在就删除 drop table if exists db_msg.tb_msg_etl;
—将Select语句的结果保存到新表中

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

image.png