大数据Hive篇_埋点、日志数据清洗(string类型)

实习期间处理业务需求不会的总结汇总,主要学习自花花里的前辈带教、与《Hive编程指南》一书,不足之处,望多多指正。

前言

实际的业务处理中,业务方提出的一个临时需求如果找不到对应的取数表,分析师可以找数仓同学要一张临时表来进行取数,但是这时的临时表往往会存在一些日志数据(用户的埋点行为日志),这时往往需要分析师进行一些数据清洗的操作来从原来的日志数据里提取出业务想要的有价值的数据出来。

常用的Hive数据清洗函数(string类型)

字符串分割(split)

  • 使用格式:

语法:split(string str,string pat)
返回:array
规则:按照pat字符分割字符str
如:hive> select split(‘abtcdtef’,‘t’) from dual;
[“ab”,“cd”,“ef”]

  • 拓展

split也可以与explode(主要用于打散数组、map类型的数据)一起使用用于数据字段得一行变多样
语法:explode(split())
当需要显示多个列时,可以考虑使用lateral view
语法:lateral view explode(split(str,pat)) (可以实现多视图的合并)

字符串截取(substr)

  • 使用格式与作用

语法:substr(string A, int start)&substr(string A, int start, int len)
返回:string
说明:返回字符串A从start位置到结尾的字符串&返回字符串A从start位置开始,长度为len的字符串
如:hive> select substr(‘abcde’,3,2) from dual;
cd

string相关的正则表达解析函数

  • 正则表达式替换函数:regexp_replace

语法: regexp_replace(string A, string B, string C)
返回值: string
说明:将字符串A中的符合java正则表达式B的部分替换为C。注意,在有些情况下要使用转义字符,类似oracle中的regexp_replace函数。
如:hive> select regexp_replace(‘foobar’, ‘oo|ar’, ‘’) from dual;
fb

  • 正则表达式解析函数:regexp_extract

语法: regexp_extract(string subject, string pattern, int index)
返回值: string
说明:将字符串subject按照pattern正则表达式的规则拆分,返回index指定的字符。
第三个参数:0 是显示与之匹配的整个字符串
1 是显示第一个括号里面的
2 是显示第二个括号里面的字段
如:hive> select regexp_extract(‘foothebar’, ‘foo(.?)(bar)’, 1) from dual;
the
hive> select regexp_extract(‘foothebar’, 'foo(.
?)(bar)’, 2) from dual;
bar
hive> select regexp_extract(‘foothebar’, ‘foo(.*?)(bar)’, 0) from dual;
foothebar
hive> select regexp_extract(‘中国abc123!’,’[\u4e00-\u9fa5]+’,0) from dual; //实用:只匹配中文
hive> select regexp_replace(‘中国abc123’,’[\u4e00-\u9fa5]+’,’’) from dual; //实用:去掉中文

实际业务场景

需求描述:业务方小姐姐想要从content(用户的埋点数据里提取出具体的每个A股热点的订阅数量)
以一条具体的content字段举例:data=xxx:{xxx:[xxx,xxx],value:[12,13,14]}(value值代表用户实时的全量关注订阅文章)

  • 需求处理分析
    1、根据需求价值的数据是content中的value值数据可以考虑使用split分割出value部分;
    2、分割value后分别拿出用户id的各自关注单个value(单个value)

  • 需求拆分条件实现

select id1
,id2
,lateral view explode( split(regexp_replace(split(content,’:’)[4],’["]}]’,’’),’,’))

参考

Hive字符处理技巧
《Hive编程指南》

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

胸中有数-数分版

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值