自定义函数(UDF)把字符串转换成日期
创建类继承UDF
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.hadoop.hive.ql.exec.Description;
import org.apache.hadoop.hive.ql.exec.UDF;
@Description(name="to_date",
value="this is my first udf!",
extended="For example : select to_date('2018/07/02 17:28:59');")
/*
* 将字符串转换成日期
*/
public class ToData extends UDF {
/*
* 计算
*/
public Date evaluate(String date) {
try{
SimpleDateFormat sdf = new SimpleDateFormat();
sdf.applyPattern("yyyy/MM/dd HH:mm:ss");
return sdf.parse(date);
}catch(ParseException e) {
e.printStackTrace();
}
return new Date();
}
}
将函数打成jar包
eclipse ->BuildPath->Configure->BuildPath->Libraries->Add External JARS->hive安装的目录/hive/lib/把所有的jar包加进去
通过hive命令将jar添加到hive的类路径
hive (default)> add jar /home/hadoop/ToDate.jar;
注册函数
hive (default)> create temporary function to_date as 'com.jhy.hive.hive2.ToData';
调用函数
select to_date('xxx');
hive (default)> create temporary function to_date as 'com.jhy.hive.hive2.ToData';
OK
Time taken: 0.126 seconds
hive (default)> desc function to_date;
OK
tab_name
this is my first udf!
Time taken: 0.284 seconds, Fetched: 1 row(s)
hive (default)> desc function extended to_date;
OK
tab_name
this is my first udf!
For example : select to_date('2018/07/02 17:28:59');
Time taken: 0.008 seconds, Fetched: 2 row(s)
hive (default)> select to_date('2018/07/02 17:28:59');
OK
_c0
{"fasttime":1530523739000,"cdate":null}
Time taken: 2.202 seconds, Fetched: 1 row(s)