利用 hive 做数据查询或者分析的时候,原生的 hive 函数可能无法满足我们的需求,这时候我们可以自定义 hive udf,函数;
自定义 hive udf 函数,有以下两点要求:
- 函数类必须继承 UDF 类
- 必须实现 evaluate 方法,hive 会根据反射机制找到这个方法,实现相应逻辑
实现 MD5 hive udf 函数注册
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.hive.ql.exec.UDF;
import java.security.MessageDigest;
public class MD5 extends UDF {
public String evaluate (final String str) {
if (StringUtils.isBlank(str)){
return "";
}
String digest = null;
StringBuffer buffer = new StringBuffer();
try {
MessageDigest digester = MessageDigest.getInstance("md5");
byte[] digestArray = digester.digest(str.getBytes("UTF-8"));
for (int i = 0; i < digestArray.length; i++) {
buffer.append(String.format("%02x", digestArray[i]));
}
digest = buffer.toString();
} catch (Exception e) {
e.printStackTrace();
}
return digest;
}
public static void main (String[] args ) {
MD5 md5 = new MD5();
System.out.println(md5.evaluate(" "));
}
}
函数注册语句:
CREATE FUNCTION dna_code AS 'hive.udf.utils.DnaCode' USING JAR ‘具体 jar 包位置’