背景

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相关推荐

  1. linux url%7b怎么转化成,shell下解码url

    http://aaronw.me/static/779.html 封装了一下,有需要的拿走 function url_decode() { local url=$ echo $url | awk 'B ...

  2. hive 的udf 函数使用

    1)依据课程讲解UDF编程案例,完成练习,总结开发UDF步骤,代码贴图,给予注释,重点 2)更改emp 表中名字的大写给为小写. 一:hive 的udf 函数: 1.1 hive UDF 函数概述: ...

  3. hive最新UDF函数(2016-10-25)

    为什么80%的码农都做不了架构师?>>>    hive UDF函数 :(后期翻译,暂时先贴着,有兴趣来  http://apache.wiki 可以一起来翻译呀) https:// ...

  4. java调mongodb自定义函数,自定义UDF函数,从hive保存到mongodb

    (可以通过idea工具调试UDF函数,第二步中会提供参考) 一.自定义UDF函数: 1.首先是pom.xml文件 xmlns:xsi="http://www.w3.org/2001/XMLS ...

  5. 编写hive udf函数

    大写转小写 package com.afan; import org.apache.hadoop.hive.ql.exec.UDF; import org.apache.hadoop.io.Text; ...

  6. 【大数据开发】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中 ...

  7. clickhouse 常用函数 算数函数 时间函数 日期函数 字符串函数 比较函数 数据类型函数 逻辑函数 类型转换函数 替换函数 数组函数 随机函数 编码函数 UUID URL IP 函数

    clickhouse 常用函数 算数函数 时间函数 日期函数 字符串函数 比较函数 数据类型函数 逻辑函数 类型转换函数 替换函数 数组函数 随机函数 编码函数 UUID URL IP 函数 算数函数 ...

  8. HIVE自定义UDF函数-经纬度转换成省市地址

    目录 1.需求背景 2.解决方案 3.代码pom引用 4.代码集成UDF 5.编译jar包 6.使用说明 7.将jar包放到hdfs 8.创建持久化function 9.测试 10.结语 1.需求背景 ...

  9. UDF函数在Hive中的使用

    文章目录 UDF介绍 Hive中的内置函数 开发一个UDF函数 ①创建一个普通的maven工程 ②pom文件中添加hive的依赖 ③开发UDF代码 ④打jar包 ⑤jar包上传服务器 Hive中添加U ...

  10. 【若泽大数据实战第十九天】Hive 函数UDF开发以及永久注册udf函数

    前言: 回顾上期课程,上次课我们讲了聚合函数,多进一出, 分组函数  group by,出现在select里面的字段除了分组函数之外,其他都要出现在group by里面,分组函数的过滤必须使用hivi ...

最新文章

  1. 使用CSDN-markdown编辑器
  2. JspServlet之Cookie
  3. 艾媒咨询:泛娱乐「体验共享」报告发布,网易云信多个案例领衔
  4. c++变量的作用域、生存期和可见性
  5. 信息学奥赛C++语言:摘李子
  6. mysql sql时间比较_mysql和sql时间 字段比较大小的问题
  7. 微型计算机基础知识答案,计算机基础知识授课试题及答案
  8. CnPack20090801更新包
  9. coreldraw教程入门零基础coreldraw下载coreldraw2019安装
  10. word中有软回车(每行后面有向下的箭头)的解决方法
  11. 导入百度导航SDK遇到的相关问题
  12. Akamai 宣布收购 IaaS 提供商 Linode
  13. ASCII码表和常见键盘码
  14. 3D中点线面之间的几何关系
  15. 部分opencv中的GPU加速函数(中文翻译)
  16. 51nod 1770数数字(找规律)
  17. STL详解(十二)—— unordered_set、unordered_map的介绍及使用
  18. 看图猜成语小程序源码
  19. Kotlin Vocabulary | Kotlin 委托代理
  20. Word无法启动转换器RECOVR32.CNV的解决方法

热门文章

  1. Jupyter Notebook界面也可以如此炫酷?有人把Notebook玩出了新花样
  2. 几个阿里,美团,腾讯大佬的公众号!超级变态!
  3. 为什么世界上近60%的人使用谷歌Chrome浏览器?
  4. jmeter笔记02
  5. HBase学习之路 (十一)HBase的协过滤器
  6. bzoj3714 [PA2014]Kuglarz
  7. 关于两个JS对象指向一个属性
  8. jquery的快捷手册
  9. 详解由VS 2010生成的Bug报告(2) - 报告的内容
  10. 一些有价值的数值公式(游戏)