自定义Hive函数
7. 函数
7.1 系统内置函数
- 查看系统自带的函数:
show functions;
- 显示自带的函数的用法:
desc function upper(函数名);
- 详细显示自带的函数的用法:
desc function extended upper;
7.2 自定义函数
-
根据用户自定义函数类别,分为以下三种:
UDF(User Defined Function)
:- 一进一出;
UDAF(User Defined Aggregation Function)
:- 聚合函数(多进一出),类似于:
max/min
等;
- 聚合函数(多进一出),类似于:
UDTF(User Defined Table Generating Function)
:- 一进多出,类似于:
lateral view explore()
;
- 一进多出,类似于:
-
自定义 UDF 的编程步骤:
- 继承
org.apache.hadoop.hive.ql.UDF
; - 需要实现
evaluate
函数;evaluate
函数支持重载; - 在 HIVE 的命令行窗口创建函数:
- 添加 jar:
add jar linux_jar_path
; - 创建 function:
create [temporary] function [dbname.]function_name AS class_name;
- 添加 jar:
- 在 HIVE 的命令行窗口删除函数:
Drop [temporary] function [if exists] [dbname.] function_name;
- 继承
-
注意事项:UDF必须要有返回类型,可以返回 NULL,但是返回类型不能为 void;
7.3 自定义 UDF 函数
// 1. 创建一个 Maven 工程 Hive
// 2. 导入依赖
<dependencies>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>1.2.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-core</artifactId>
<version>2.8.2</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
</dependency>
</dependencies>
<build>
<plugins>
<!--java 的编译版本 1.8-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
</plugin>
</plugins>
</build>
// 3. 创建一个类
import org.apache.hadoop.hive.ql.exec.UDF;
public class HiveUdf extends UDF {
public String evaluate(final String s) {
if (s == null) {
return null;
}
return s.toLowerCase();
}
}
// 4.1 将 jar 包添加到 Hive 的 classpath
进入Hive Shell: bin/hive
添加 jar: add jar jar包所在路径
// 4.2 创建临时函数与自定义的 java class 关联
create temporary function myLowerCase as "com.noodles.hive.HiveUdf";
// 5. 使用自定义函数
select myLowerCase(ename) from emp;
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· C# 13 中的新增功能实操
· Ollama本地部署大模型总结
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(4)
· langchain0.3教程:从0到1打造一个智能聊天机器人
· 2025成都.NET开发者Connect圆满结束