Hive对字段进行urlDecode
最近项目中需要对埋点日志hive表进行分析,并且按一定的规则统计出来满足要求的用户pin。本来以为是一件比较简单的事,结果在查看导出的词表时发现很多带有"%"的明显具有url encode特征的用户pin,于是就开启了这篇文章用hive对字段进行urlDecode的探索。
在查看了一些资料后,刚开始我是选择直接用reflect函数调用java自带的URLDecoder方法来对user_pin进行处理的,具体hive sql如下:
hive -e "select reflect('java.net.URLDecoder', 'decode', user_pin, 'UTF-8') as user_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="select reflect('java.net.URLDecoder', 'decode', regexp_replace(regexp_replace(user_pin, '%(?\\![0-9a-fA-F]{2})', '%25'), '\\\\+', '%2B'), 'UTF-8') from table where [condition]" #如果是用双引号包裹查询语句值
sql='''
select reflect("java.net.URLDecoder", "decode", regexp_replace(regexp_replace(user_pin, "%(?![0-9a-fA-F]{2})", "%25"), "\\\\+", "%2B"), "UTF-8") from table where [condition]
''' #执行sql
hive -e "$sql"
如果你用的是单引号包裹查询语句的值的时候,一定要记得对!进行转义,否则会出现-bash: !": event not found的问题的。
转载请注明出处:https://www.cnblogs.com/fnlingnzb-learner/p/13442744.html
Hive对字段进行urlDecode的更多相关文章
- [Hive]新增字段(column)后,旧分区无法更新数据问题
		
问题描述: 实际应用中,常常存在修改数据表结构的需求,比如:增加一个新字段. 如果使用如下语句新增列,可以成功添加列col1.但如果数据表tb已经有旧的分区(例如:dt=20190101),则该旧分区 ...
 - Talend 将Oracle中数据导入到hive中,根据系统时间设置hive分区字段
		
首先,概览下任务图: 流程是,先用tHDFSDelete将hdfs上的文件删除掉,然后将oracle中的机构表中的数据导入到HDFS中:建立hive连接->hive建表->tJava获取系 ...
 - Hbase与hive整合
		
//hive与hbase整合create table lectrure.hbase_lecture10(sname string, score int) stored by 'org.apache.h ...
 - hive创建表带中文注释报错解决方法
		
hive创建带有中文注释的表报错: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask ...
 - Hive 的简单使用及调优参考文档
		
Hive 的简单使用及调优参考文档 HIVE的使用 命令行界面 使用一下命令查看hive的命令行页面, hive --help --service cli 简化命令为hive –h 会输出下面的这 ...
 - hive sql常用整理-hive引擎设置
		
遇到个情况,跑hive级联insert数据报错,可以尝试换个hive计算引擎 hive遇到FAILED: Execution Error, return code 2 from org.apache. ...
 - hive中解决中文乱码
		
一.个人初始开发环境的基本情况以及Hive元数据库说明 ①hive的元数据库改成了mysql(安装完mysql之后也没有进行其它别的设置) ②hive-site.xml中设置元数据库对应的配置为 j ...
 - 大数据开发实战:离线大数据处理的主要技术--Hive,概念,SQL,Hive数据库
		
1.Hive出现背景 Hive是Facebook开发并贡献给Hadoop开源社区的.它是建立在Hadoop体系架构上的一层SQL抽象,使得数据相关人员使用他们最为熟悉的SQL语言就可以进行海量数据的处 ...
 - hive 上篇
		
hive 是以hadoop为基础的数据仓库,使用HQL查询存放在HDFS上面的数据,HSQL是一种类SQL的语句,最终会被编译成map/reduce,HSQL可以查询HDFS上面的数据:不支持记录级别 ...
 
随机推荐
- 安装visual stdio 2017后依然报错:Unable to find vcvarsall.bat
			
安装visual stdio 2017后依然报错:Unable to find vcvarsall.bat 解决办法:更新setuptools 原文章:https://blog.csdn.net/wl ...
 - CRM【第二篇】: stark组件
			
介绍: stark组件,是一个帮助开发者快速实现数据库表的增删改查+的组件.目标: 10s 中完成一张表的增删改查. 前戏: django项目启动时,自定义执行某个py文件. django启动时,且在 ...
 - Ethical Hacking - Web Penetration Testing(11)
			
SQL INJECTION Preventing SQLi Filters can be bypassed. Use a blacklist of commands? Still can be byp ...
 - css初始化表(normalize.css)
			
为什么要初始化CSS? 建站老手都知道,这是为了考虑到浏览器的兼容问题,其实不同浏览器对有些标签的默认值是不同的,如果没对CSS初始化往往会出现浏览器之间的页面差异.当然,初始化样式会对SEO有一定的 ...
 - 坚果云如何使用二次验证码/谷歌身份验证器/两步验证/虚拟MFA?
			
一般步骤:登陆后点邮箱名——安全设置——开通两步验证,用二次验证码微信小程序绑定即可 具体步骤见链接 坚果云如何使用二次验证码/谷歌身份验证器/两步验证/虚拟MFA? 二次验证码小程序于谷歌身份验证 ...
 - Everything搜索表达式
			
导出搜索列表为txt或csv  索引最近变化 维持一个额外的按照最近变化排序的系统文件数据库,其可以通过 rc: 搜索,或以最近变化排序.  搜索运行次数大于 100: runcount:> ...
 - DJANGO-天天生鲜项目从0到1-008-列表页
			
本项目基于B站UP主‘神奇的老黄’的教学视频‘天天生鲜Django项目’,视频讲的非常好,推荐新手观看学习 https://www.bilibili.com/video/BV1vt41147K8?p= ...
 - Eclipse普通java Project文件路径问题
			
Eclipse普通java Project文件路径问题 项目的结构如图 读取src里某个包下的文件,代码如下 BufferedReader br=new BufferedReader(new File ...
 - web自动化 -- HTMLreport(一)测试报告自定义测试用例名,重写ddt
			
一.需求痛点 1.HTMLreport测试报告的用例名不明确 2.希望可以自定义HTMLreport测试报告的用例名 3.痛点截图 二.解决办法 1.原因分析 HTMLreport测试报告中的用例名是 ...
 - Python Python Python 100个练手项目
			
1.淘宝模拟登录2.天猫商品数据爬虫3.爬取淘宝我已购买的宝贝数据4.每天不同时间段通过微信发消息提醒女友5.爬取5K分辨率超清唯美壁纸6.爬取豆瓣排行榜电影数据(含GUI界面版)7.多线程+代理池爬 ...