用户自定义函数用户:
根据条件在hive中查询,将统计的结果导入到mysql中,通用的函数
根据我们的主键,取出时间戳信息和设备id
1.查看函数的命令
# 查看系统自带的函数
show functions;
# 显示自带的函数的用法
desc function upper;
# 详细显示自带的函数的用法
desc function extended upper;
2.用户自定义函数描述
常用用户自定义函数分类为以下三种:
-
UDF(User-Defined-Function):一进一出
-
UDAF(User-Defined Aggregation Function):聚集函数,多进一出,类似于:count/min/max
-
UDTF(User-Defined Table-Generating Functions):一进多出
3.UDF实现步骤
-
继承org.apache.hadoop.hive.ql.UDF类
-
实现evaluate()方法,支持evaluate()方法重载
-
在hive的命令行窗口创建函数
-
添加jar包:add jar jar包的路径
-
创建function:create [temporary] function [dbname] function_name AS class_name
注意事项:
-
UDF必须要有返回类型,可以返回null,但是返回类型不能为void
-
UDF中常用Text/LongWritable等类型,不推荐使用java类型
4.UDF实例
(1)创建一个java工程,并创建一个lib文件夹,将hive的jar包解压后,将apache-hive-1.2.1-bin\lib文件下的jar包都拷贝到java工程中。
或者可以直接配置maven。
(2)创建一个类
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
import java.io.UTFDataFormatException;
public class HelloUdf extends UDF {
public Text evaluate (final Text t) {
if (t == null) {
return null;
}
return new Text("Hello:" + t);
}
(3)永久函数,把jar包上传到hdfs上
hdfs dfs -put udf_tes.jar /lib
(4)创建永久函数
CREATE FUNCTION udf_test
AS 'com.unis.TestUDF'
USING JAR 'hdfs:///lib/udf_tes.jar';