Hive 的字符串UrlDecode 中文解码
作者:admin 日期:2017-05-23
真没想到,原来HIVE自己有Urldecode,原本以为要写一个UDF,结果不然。
业务场景: 某字段基本为中文字符,采集时做了urlEncode处理,入到库中没有解码。
要解决的问题:将encode的数据做urldecode处理
方案一:自构建一个UDF函数,需要继承UDF,实现其evaluate()方法
复制内容到剪贴板 程序代码
@Description(name = "decoder_url", value = "_FUNC_(url [,code][,count]) - decoder a URL from a String for count times using code as encoding scheme ", extended = ""
+ "if count is not given ,the url will be decoderd for 2 time,"
+ "if code is not given ,GBK is used")
public class UDFDecoderUrl extends UDF {
private String url = null;
private int times = 2;
private String code = "GBK";
public UDFDecoderUrl() {
}
public String evaluate(String urlStr, String srcCode, int count) {
if (urlStr == null) {
return null;
}
if (count <= 0) {
return urlStr;
}
if (srcCode != null) {
code = srcCode;
}
url = urlStr;
times = count;
for (int i = 0; i < times; i++) {
url = decoder(url, code);
}
return url;
}
public String evaluate(String urlStr, String srcCode) {
if (urlStr == null) {
return null;
}
url = urlStr;
code = srcCode;
return evaluate(url, code,times);
}
public String evaluate(String urlStr, int count) {
if (urlStr == null) {
return null;
}
if (count <= 0) {
return urlStr;
}
url = urlStr;
times = count;
return evaluate(url, code,times);
}
public String evaluate(String urlStr) {
if (urlStr == null) {
return null;
}
url = urlStr;
return evaluate(url, code,times);
}
private String decoder(String urlStr, String code) {
if (urlStr == null || code == null) {
return null;
}
try {
urlStr = URLDecoder.decode(urlStr, code);
} catch (Exception e) {
return null;
}
return urlStr;
}
}
打包上传应用的操作就不描述了
但是,还有更好的,直接应用
方案二
复制内容到剪贴板 程序代码
select reflect("java.net.URLDecoder", "decode", trim(字段名), "UTF-8") from 库名.表名 limit 10;
得到的结果
两个方案 你选哪种呢?
参考
http://bigdatums.net/2016/11/13/how-to-decode-urls-in-hive/
http://grokbase.com/t/hive/user/119f4qdsmh/urldecode-hive-column
[本日志由 admin 于 2017-05-23 12:17 AM 更新]
上一篇: 2017.05.14. 2017凯乐石广州龙洞越野下一篇: Hive应用sqoop从MS-SQL 和Oracle 全量增量导入至HIVE
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
相关日志:
评论: 1 | 引用: 0 | 查看次数: 23067
gggbbb[2021-11-10 01:42 PM | | | 121.8.153.6 | | 取消审核 | 回复]
如果是unicode编码呢
发表评论