写在前面
最近在学习Impala,想将学到的Impala知识记录下来,因为需要对Impala查询出的数据字段进行一个字段的规范,impala自带的函数不能够支持,所以需要自己实现一个UDF,来完成对字段的规范。
编写UDF函数
编写UDF函数,最终打成一个jar包。
import org.apache.hadoop.hive.ql.exec.UDF;
public class DateFormat extends UDF
{
private static final int ORIGIN_DATE_LENGTH = 29;
public String evaluate(String originDate)
{
if (originDate.length() != 29) {
return "";
}
StringBuilder sb = new StringBuilder();
sb.append(originDate.substring(15, 19)).append("-")
.append(originDate
.substring(19, 21))
.append("-")
.append(originDate
.substring(21, 23))
.append(" ")
.append(originDate
.substring(23, 25))
.append(":")
.append(originDate
.substring(25, 27))
.append(":")
.append(originDate
.substring(27, 29));
return sb.toString();
}
}
上传到HDFS上
create function data_udf(string) returns string location 'hdfs://master:9000/tmp/udf/date.format.jar' symbol='format.DateFormat';
在impala上将函数导入
create function data_udf(string) returns string location 'hdfs://master:9000/tmp/udf/dateformat.jar' symbol='format.DateFormat';
使用UDF查出结果
select data_ud2f(date_time) from track_test03 limit 10