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上面的数据:不支持记录级别 ... 
随机推荐
- 深度剖析分布式单点登录框架XXL-SSO
			于2018年初,在github上创建XXL-SSO项目仓库并提交第一个commit,随之进行系统结构设计,UI选型,交互设计-- 于2018年初,在github上创建XXL-SSO项目仓库并提交第一个 ... 
- 这就是Java代码生成器的制作流程
			1. 前言 前几天写了篇关于Mybatis Plus代码生成器的文章,不少同学私下问我这个代码生成器是如何运作的,为什么要用到一些模板引擎,所以今天来说明下代码生成器的流程. 2. 代码生成器的使用场 ... 
- javascript : 找到一个树型数据的一个节点及其所有父节点
			如题. (function () { let tree = { "id": 0, "label": "all", "childre ... 
- p70_域名解析系统DNS
			一.DNS作用 二.域名 www.cskaoyan.com. www 三级域名 cskaoyan 二级域名 com 顶级域名 三.域名服务器 根域名服务器:知道所有顶级域名服务器的域名和ip地址 顶级 ... 
- PyQt5布局管理器
			布局分类 绝对定位:使用move方法将空间直接定死在某个坐标,不会随着窗口大小的改变而改变 可变布局:使用各种布局管理器,实现组件的位置和大小随着窗口的变化而变化 布局管理器 QHBoxLayout: ... 
- 阿里云如何使用二次验证码/虚拟MFA/两步验证/谷歌验证器?
			阿里云如何使用二次验证码/虚拟MFA/两步验证/谷歌验证器? 见如上链接中视频 
- springboot手动事务回滚
			亲测在使用@Transactional.@Transactional(rollbackFor = Exception.class)及catch异常之后 throw new RuntimeExcepti ... 
- Java7/8 中的 HashMap 和 ConcurrentHashMap
			Java7 HashMap 数组+链表 Java7 ConcurrentHashMap Segment数组+HashEntry数组链表+ReenTrantLock分段锁 Java8 HashMa ... 
- jsp课堂笔记2
			jsp页面的基本结构 jsp标记 普通html标记 变量和方法的声明 java程序片 java表达式 变量和方法的声明 <%! %> 标记符号之间声明变量和方法 成员变量即全局变 ... 
- python 99乘法表
			先把代码贴上 for i in range(1,10): for j in range(1,i+1): s="%d X %d = %d"%(j,i,i*j) print(s,end ... 
