7. 函数
7.1 系统内置函数
- 查看系统自带的函数:
show functions;
- 显示自带的函数的用法:
desc function upper(函数名);
- 详细显示自带的函数的用法:
desc function extended upper;
7.2 自定义函数
- 根据用户自定义函数类别,分为以下三种:
UDF(User Defined Function)
: UDAF(User Defined Aggregation Function)
: 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;
- 在 HIVE 的命令行窗口删除函数:
Drop [temporary] function [if exists] [dbname.] function_name;
- 注意事项:UDF必须要有返回类型,可以返回 NULL,但是返回类型不能为 void;
7.3 自定义 UDF 函数
// 1. 创建一个 Maven 工程 Hive// 2. 导入依赖 org.apache.hive hive-exec 1.2.1 junit junit 4.8.2 test org.apache.logging.log4j log4j-core 2.8.2 org.projectlombok lombok 1.16.18 org.apache.maven.plugins maven-compiler-plugin 1.8 1.8 UTF-8 org.apache.maven.plugins maven-surefire-plugin 2.17 // 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;