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上面的数据:不支持记录级别 ...
随机推荐
- 数据可视化之powerBI入门 (一)认识PowerBI
来自 https://zhuanlan.zhihu.com/p/64144024 Power BI是什么? Power BI是微软推出的数据分析和可视化工具,我们先来看看微软官方是怎么介绍的: Po ...
- day8 python 列表,元组,集合,字典的操作及方法 和 深浅拷贝
2.2 list的方法 # 增 list.append() # 追加 list.insert() # 指定索引前增加 list.extend() # 迭代追加(可迭代对象,打散追加) # 删 list ...
- getprop与dumpsys命令
拿到Android手机以后, 想查看一些手机信息. 其实Android获取手机信息就是两个命令, 一个是getprop 一个是dumpsys. dumpsys iphonesubinfo Phone ...
- 为什么学习vue?
公司要求学习uni-app,了解了一下这个uni-app uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS.Android.H5.以及各种小程序(微 ...
- LevelDB,你好~
LevelDB,你好~ 上篇文章初识:LevelDB介绍了啥是LevelDB,LevelDB有啥特性,以及Linux环境下编译,使用及调试方法. 这篇文章的话,算是LevelDB源码学习的开端吧,主要 ...
- android获取各种系统路径的方法
链接https://blog.csdn.net/qq_26296197/article/details/51909423 通过Environment获取的 Environment.getDataDir ...
- fgdsafhak
- Redis之NoSql入门和概述(二)
2. 什么是NoSQL? 2.1 NoSQL 概述 NoSQL(NoSQL = Not Only SQL ),意即“不仅仅是SQL”,泛指非关系型的数据库.随着互联网web2.0网站的兴起, ...
- Fortify Audit Workbench 笔记 Command Injection(命令注入)
Command Injection(命令注入) Abstract 执行不可信赖资源中的命令,或在不可信赖的环境中执行命令,都会导致程序以攻击者的名义执行恶意命令. Explanation Comman ...
- Shiro @RequiresRoles注解相关参数说明
@RequiresRoles(value={"admin","user"},logical = Logical.OR) @RequiresPermissions ...