前言
想与你们共同学习,想与你们一起努力,想得到你们的支持与喜欢~
内置函数
# 查看hive内置函数
show functions;
# 查看函数描述信息
desc function max;
用户自定义函数UDF
UDF:user-defined function
操作作用于单个数据行,并且产生一个数据行作为输出。大多数函数都属于这一类(比如数学函数和字符串函数)。length('abc') = 3
1. 用户自定义函数-UDF
导入依赖:
<dependencies>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>3.1.2</version>
</dependency>
</dependencies>
2. 定义类
# 1.定义一个类继承UDF
1. 必须继承UDF
2. 方法名必须是evaluate
java
package function;
import org.apache.hadoop.hive.ql.exec.UDF;
public class HelloUDF extends UDF {
public String evaluate(String s1){
return "你好,"+s1;
}
}
3. 配置maven打包环境,打包jar
java
<properties>
<!--解决编码的GBK的问题-->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<build>
<finalName>funcHello</finalName>
</build>
java
# 打包
mvn package
3. jar包上传linux,导入到函数库中
4. 在hive中执行命令
java
# 在hive命令中执行
add jar /opt/data/funcHello.jar; # hive session级别的添加,
delete jar /opt/data/funcHello.jar; # 如果重写,记得删除。
create temporary function hello as "function.HelloUDF"; # temporary是会话级别。
# 删除导入的函数
drop temporary function hello;
5. 查看函数并使用函数
java
-- 1. 查看函数
desc function hello;
-- 2. 使用函数进行查询
select hello(name) from t_person;
永久函数和临时函数
java
临时函数和永久函数的区别:临时函数仅对当前session(黑窗口)有效。永久函数是全局的。
1. 临时函数
1.1 添加jar包的两种方法
方法一: add jar /home/hadoop/lib/hive-1.0-SNAPSHOT.jar;
方法二: 在hive的文件夹下面创建auxlib文件夹,将jar包上传到auxlib文件夹下面,重启hive。
1.2 创建临时函数
语法:CREATE TEMPORARY FUNCTION function_name AS class_name;
function_name函数名
class_name 类路径,包名+类名
1.3 删除临时函数
语法:DROP TEMPORARY FUNCTION [IF EXISTS] function_name;
2. 永久函数
2.1 在HDFS上创建hivelib目录,将jar包上传到HDFS的hivelib目录下
hdfs dfs -mkidr /hivelib
hdfs dfs -put funcHello.jar /hive/lib
2.1 创建永久函数的语法:
CREATE FUNCTION [db_name.]function_name AS class_name USING JAR 'hdfs://hadoop10:8020/hivelib/funcHello.jar'