UDF函数 解码url
背景
URL 的编码 是ASCII十六进制格式。数仓接受到前端上报的URL,要对URL字段解码。
如要将
https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2"Fmybook.do%3Frequest_type%3D%26type%3Dprivate
解码为:
https://mywebsite/docs/english/site/mybook.do?request_type=&type=private
方式
hive sql中,通过反射调用java.net.URLDecoder方法
select reflect('java.net.URLDecoder', 'decode',url, 'UTF-8') from table_name;
问题
实践中发现,部分https开头的url解析不完整。例如解码下面的URL,
https%253A%252F%252Fwww.cnblogs.com/drjava
通过上面的方法,结果是:
https%3A%2F%2Fwww.cnblogs.com/drjava
解决方案
通过google找到了可行的方法,解码两次,由于sql写起来比较难以阅读,所以封装了udf。代码如下:
1 import org.apache.hadoop.hive.ql.exec.UDF; 2 import java.io.UnsupportedEncodingException; 3 import java.net.URLDecoder; 4 5 public class UrlDecode extends UDF { 6 /** 7 * 8 * 9 * @param component 编码的url 10 * @return 解码url 11 */ 12 public String evaluate(String component) { 13 if(component == null || component.length() <= 0){ 14 return ""; 15 } 16 17 String result = ""; 18 component = component.replaceAll("%(?![0-9a-fA-F]{2})", "%25"); 19 try { 20 result = URLDecoder.decode(component, "UTF-8"); 21 result = URLDecoder.decode(result, "UTF-8"); 22 } catch (UnsupportedEncodingException e) { 23 result = component; 24 } 25 return result; 26 } 27 }
做一下单元测试
1 import org.junit.Assert; 2 import org.junit.Test; 3 import udf.UrlDecode; 4 5 public class UrlDecodeTest { 6 @Test 7 public void UrlDecodeMethod(){ 8 UrlDecode ud = new UrlDecode(); 9 Assert.assertEquals(ud.evaluate("https%3A%2F%2Fmywebsite%2Fdocs%2Fenglish%2Fsite%2" + 10 "Fmybook.do%3Frequest_type%3D%26type%3Dprivate"), 11 "https://mywebsite/docs/english/site/mybook.do?request_type=&type=private"); 12 13 Assert.assertEquals(ud.evaluate("你是谁,为了谁"),"你是谁,为了谁"); 14 15 Assert.assertEquals(ud.evaluate(null),""); 16 } 17 }
转载于:https://www.cnblogs.com/drjava/p/10730504.html
UDF函数 解码url相关推荐
- linux url%7b怎么转化成,shell下解码url
http://aaronw.me/static/779.html 封装了一下,有需要的拿走 function url_decode() { local url=$ echo $url | awk 'B ...
- hive 的udf 函数使用
1)依据课程讲解UDF编程案例,完成练习,总结开发UDF步骤,代码贴图,给予注释,重点 2)更改emp 表中名字的大写给为小写. 一:hive 的udf 函数: 1.1 hive UDF 函数概述: ...
- hive最新UDF函数(2016-10-25)
为什么80%的码农都做不了架构师?>>> hive UDF函数 :(后期翻译,暂时先贴着,有兴趣来 http://apache.wiki 可以一起来翻译呀) https:// ...
- java调mongodb自定义函数,自定义UDF函数,从hive保存到mongodb
(可以通过idea工具调试UDF函数,第二步中会提供参考) 一.自定义UDF函数: 1.首先是pom.xml文件 xmlns:xsi="http://www.w3.org/2001/XMLS ...
- 编写hive udf函数
大写转小写 package com.afan; import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.io.Text; ...
- 【大数据开发】SparkSQL——Spark对接Hive、Row类、SparkSQL函数、UDF函数(用户自定义函数)、UDAF函数、性能调优、SparkSQL解决数据倾斜
文章目录 一.Spark对接Hive准备工作 1.1 集群文件下载 1.2 导入依赖 1.3 打开集群metastore服务 二.Spark对接Hive 2.1 查询Hive 2.2 读取MySQL中 ...
- clickhouse 常用函数 算数函数 时间函数 日期函数 字符串函数 比较函数 数据类型函数 逻辑函数 类型转换函数 替换函数 数组函数 随机函数 编码函数 UUID URL IP 函数
clickhouse 常用函数 算数函数 时间函数 日期函数 字符串函数 比较函数 数据类型函数 逻辑函数 类型转换函数 替换函数 数组函数 随机函数 编码函数 UUID URL IP 函数 算数函数 ...
- HIVE自定义UDF函数-经纬度转换成省市地址
目录 1.需求背景 2.解决方案 3.代码pom引用 4.代码集成UDF 5.编译jar包 6.使用说明 7.将jar包放到hdfs 8.创建持久化function 9.测试 10.结语 1.需求背景 ...
- UDF函数在Hive中的使用
文章目录 UDF介绍 Hive中的内置函数 开发一个UDF函数 ①创建一个普通的maven工程 ②pom文件中添加hive的依赖 ③开发UDF代码 ④打jar包 ⑤jar包上传服务器 Hive中添加U ...
- 【若泽大数据实战第十九天】Hive 函数UDF开发以及永久注册udf函数
前言: 回顾上期课程,上次课我们讲了聚合函数,多进一出, 分组函数 group by,出现在select里面的字段除了分组函数之外,其他都要出现在group by里面,分组函数的过滤必须使用hivi ...
最新文章
- 使用CSDN-markdown编辑器
- JspServlet之Cookie
- 艾媒咨询:泛娱乐「体验共享」报告发布,网易云信多个案例领衔
- c++变量的作用域、生存期和可见性
- 信息学奥赛C++语言:摘李子
- mysql sql时间比较_mysql和sql时间 字段比较大小的问题
- 微型计算机基础知识答案,计算机基础知识授课试题及答案
- CnPack20090801更新包
- coreldraw教程入门零基础coreldraw下载coreldraw2019安装
- word中有软回车(每行后面有向下的箭头)的解决方法
- 导入百度导航SDK遇到的相关问题
- Akamai 宣布收购 IaaS 提供商 Linode
- ASCII码表和常见键盘码
- 3D中点线面之间的几何关系
- 部分opencv中的GPU加速函数(中文翻译)
- 51nod 1770数数字(找规律)
- STL详解(十二)—— unordered_set、unordered_map的介绍及使用
- 看图猜成语小程序源码
- Kotlin Vocabulary | Kotlin 委托代理
- Word无法启动转换器RECOVR32.CNV的解决方法