利用 hive 做數(shù)據(jù)查詢或者分析的時候,原生的 hive 函數(shù)可能無法滿足我們的需求,這時候我們可以自定義 hive udf,函數(shù);
自定義 hive udf 函數(shù),有以下兩點要求:
- 函數(shù)類必須繼承 UDF 類
- 必須實現(xiàn) evaluate 方法,hive 會根據(jù)反射機制找到這個方法,實現(xiàn)相應(yīng)邏輯
實現(xiàn) MD5 hive udf 函數(shù)注冊
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(" "));
}
}
函數(shù)注冊語句:
CREATE FUNCTION dna_code AS 'hive.udf.utils.DnaCode' USING JAR ‘具體 jar 包位置’