1.函数
UDF是在hive查询产生的相同的task进程中执行的,因此它们可以高效的执行,而且其消除了和其他系统集成时所产生的复杂度
使用UDF表示任意函数
查看函数信息
package com.hive.createDemo;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
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;
@SuppressWarnings("unused")
public class HIvetestUDF extends UDF {
public String evaluate(String s) {
if (s == null)
return null;
SimpleDateFormat datafm1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(datafm1.toString());
SimpleDateFormat datafm2 = new SimpleDateFormat("EEEE");
try {
return datafm2.format(datafm1.parse(s));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return s;
}
}
将工程项目打包生成jar包。
2.函数调用
1.创建表导入数据
1 2018-23-23 01:55:433
hive>create table testudf(key int, value string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t';
hive>load data local inpath '/tmp/UDF.txt' overwrite into table testudf;
2.调用方法
function后加的是自定方法名,提供报名+类名。
hive> add jar /home/hadoop/input/hive/hiveeclipse/UDF.jar;
Added [/home/hadoop/input/hive/hiveeclipse/UDF.jar] to class path
Added resources: [/home/hadoop/input/hive/hiveeclipse/UDF.jar]
hive> create temporary function HIvetestUDF as 'com.hive.createDemo.HIvetestUDF';
OK
Time taken: 0.161 seconds
hive> select * from testudf;
OK
1 2018-23-23 01:55:433
Time taken: 1.736 seconds, Fetched: 1 row(s)
hive> select key,HIvetestUDF(value) from testudf;
OK
java.text.SimpleDateFormat@4f76f1a0
1 星期六
Time taken: 0.48 seconds, Fetched: 1 row(s)
hive>