hive中能用decode_Hive对字段进行urlDecode

更新时间:2023-07-25 12:18:31 阅读: 评论:0

hive中能⽤decode_Hive对字段进⾏urlDecode
最近项⽬中需要对埋点⽇志hive表进⾏分析,并且按⼀定的规则统计出来满⾜要求的⽤户pin。本来以为是⼀件⽐较简单的事,结果在查看导出的词表时发现很多带有"%"的明显具有url encode特征的⽤户pin,于是就开启了这篇⽂章⽤hive对字段进⾏urlDecode的探索。
在查看了⼀些资料后,刚开始我是选择直接⽤reflect函数调⽤java⾃带的URLDecoder⽅法来对ur_pin进⾏处理的,具体hive sql如下:气喘如牛
hive -e "lect reflect('java.URLDecoder', 'decode', ur_pin, 'UTF-8') as ur_pin from table where [condition]"
本来以为解决了问题⼤功告成了,结果跑数的时候总出现下⾯这个异常:北京作文
枫桦豪景
URLDecoder异常Illegal hex characters in escape (%)
心灵共鸣查看了⼀下源数据,发现是因为有些⽤户pin中本来就带有"%"导致的(可能是⾮法攻击或者埋点上报异常引起),使URLDecode失败。参照了⼀下之前java处理URLDecode异常的经验,想着在url解码之前对数据先做⼀些预处理,但是由于reflect基本只有在调⽤静态⽅法的时候才有意义,所以不能直接通过reflect⽤replaceAll⽅法。于是想到了⽤hive⾃带的udf中的regexp_replace来替代replaceAll,具体代码如下:壮丽的反义词
我不知道的英文能力的分类#如果是⽤的单引号包裹查询语句值,需要对!进⾏处理
脱式计算五年级sql="lect reflect('java.URLDecoder', 'decode', regexp_replace(regexp_replace(ur_pin, '%(?\\![0-9a-fA-F]{2})', '%25'),
'\\\\+', '%2B'), 'UTF-8') from table where [condition]"#如果是⽤双引号包裹查询语句值
sql='''lect reflect("java.URLDecoder", "decode", regexp_replace(regexp_replace(ur_pin, "%(?![0-9a-fA-F]{2})", "%25"), "\\\\+", "%2B"), "UTF-8") from table where [condition]'''#执⾏sql
hive-e "$sql"
如果你⽤的是单引号包裹查询语句的值的时候,⼀定要记得对!进⾏转义,否则会出现-bash: !": event not found的问题的。

本文发布于:2023-07-25 12:18:31,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1096022.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:查看   语句   时候   查询   结果
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图