本文为您介绍如何通过Java UDF获取含有二级分隔符的字符串中指定Key对应的Value值。
获取字符串(含有分隔符)Value的UDF
UDFKeyValueEx(String str, String split1, String split2, String keyname)
- 函数功能:取出Key所对应的Value值。先按一级分隔符进行分割,然后按二级分隔符进行分隔,再取出Key所对应的Value值。与UDFKeyValue主要的不同在于,该UDF适用于Value值本身含有二级分隔的情况。
- 参数说明:
str
:字符串。split1
:一级分隔符,为正则表达式。默认一级分隔符为;
。split2
:二级分隔符,非正则表达式。默认二级分隔符为:
。keyname
:要获取的Key值。
UDF使用示例
- 注册函数
UDFKeyValueEx.java测试通过后,将其注册函数。说明
- MaxCompute Studio提供了一键发布功能,即依次执行
mvn clean package
、上传JAR和注册UDF这三个步骤。您也可以使用DataWorks上传JAR包,详情请参见创建MaxCompute资源。 - 通过客户端使用常用命令进行资源上传操作,详情请参见资源操作。
- MaxCompute Studio提供了一键发布功能,即依次执行
- 使用示例
成功注册UDF后,执行以下命令:
- 示例一
运行结果如下。select UDFKeyValueEx('a:b;c:d', ';', ':', 'a');
+-----+ | _c0 | +-----+ | b | +-----+
- 示例二
运行结果如下。select UDFKeyValueEx('a:b:c;c:d', ';', ':', 'a:b');
+-----+ | _c0 | +-----+ | c | +-----+
- 示例一
UDF代码示例
// package名称,可以根据您的情况定义。
package com.aliyun.odps.examples.udf;
import com.taobao.bi.odps.udf.UDF;
public class UDFKeyValueEx extends UDF {
public String evaluate(String str, String keyname) {
// 默认分隔符split1=; split2=:。
return evaluate(str, ";", ":", keyname);
}
public String evaluate(String str, String split1, String split2, String keyname) {
try {
if (str==null || split1==null || split2==null || keyname==null){
return null;
}
// 使用二级分隔符。
String keySplit = keyname+split2;
// 遍历字符串。
for (String subStr : str.split(split1)){
if (subStr.startsWith(keySplit)){
if (keySplit.length() < subStr.length()){
//返回结果值。
return subStr.substring(keySplit.length());
}else{
return null;
}
}
}
// 没有Key对应的value。
return null;
} catch (Exception e) {
return null;
}
}
}
在文档使用中是否遇到以下问题
更多建议
匿名提交