例子:
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-client</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-hdfs</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>2.1.1</version>
</dependency>
</dependencies>
import org.apache.hadoop.hive.ql.exec.UDF;
import java.text.ParseException;
import java.text.SimpleDateFormat;
/**
* Description: xxx
* Copyright(c),2020,zll
* This program is protected by laws
* Date:2020年#05月27日
*
* @author zll
* @version:1.0
*/
public class DateUtils extends UDF {
/**
* 将日期字符串格式化为标准的日期格式
* 如:
* 2017-8-9 to 2017-08-09
* 2017-08-09 9:23:3 to 2017-08-0909:23:03
* @param sdate
* @param pattern
* @return
*/
public static String evaluate(String sdate, String pattern) {
String formatDate = sdate;
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
try {
formatDate =sdf.format(sdf.parse(sdate));
} catch (ParseException e) {
e.printStackTrace();
}
return formatDate;
}
}
scp /Users/zll/Desktop/dateUtils.jar root@hadoop01:/data/hive/lib
add jar /data/hive/lib/dateUtils.jar;
CREATE TEMPORARY FUNCTION dateUtils as 'DateUtils';
'SubstrTimeUDF’代表你在编写自定义函数的类名
数据准备:
1,2019-6-2 11:09:12
2,2019-6-4 11:12:12
3,2019-06-25 11:12:13
建表语句:
create table login_time(
id int,
loginTime string
)
row format delimited
fields terminated by ',';
加载数据:
load data local inpath '/root/data/arithmetic/data3' overwrite into table login_time;
检查数据:
hive> select * from login_time;
OK
1 2019-6-2 11:09:12
2 2019-6-4 11:12:12
3 2019-06-25 11:12:13
测试自定义函数:
select dateUtils(loginTime,"yyyy-MM-dd HH:mm:ss") from login_time;
结果:
hive> select dateUtils(loginTime,"yyyy-MM-dd HH:mm:ss") from login_time;
OK
2019-06-02 11:09:12
2019-06-04 11:12:12
2019-06-25 11:12:13
Time taken: 0.067 seconds, Fetched: 3 row(s)
4)其他命令:
查询函数:show functions;
显示UDF函数: show functions like dateUtils;
删除临时函数: drop TEMPORARY function dateUtils;
scp /Users/zll/Desktop/SubstrTimeUDF.jar root@hadoop01:/data/hive/lib
hadoop fs -mkdir /user/lib/
hadoop fs -put /data/hive/lib/dateUtils.jar /user/lib/
hadoop fs -chmod a+x /user/lib/dateUtils.jar
create function default.dateUtils as 'DateUtils'
using jar 'hdfs://hadoop01:9000/user/lib/dateUtils.jar';
测试结果:
hive> select default.dateUtils(loginTime,"yyyy-MM-dd HH:mm:ss") from login_time;
OK
2019-06-02 11:09:12
2019-06-04 11:12:12
2019-06-25 11:12:13
Time taken: 0.086 seconds, Fetched: 3 row(s)