Build-in 内置函数
官网 https://cwiki.apache.org/confluence/display/Hive/Home DML/Operators and UDFs
-
一些常用内置UDF、UDAF函数
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF -
UDTF函数,行列转换
collect_list:配合group by 将多行数据收集为一个数组
concat_ws 将多个拼接为一个
split 将一个拆分成多个
explode 栅列 函数# name # course PK MapReduce,Hive,Spark,Flink J Hadoop,HBase,Kafka // 将以上数据,处理为: PK MapReduce PK Hive PK Spark PK Flink J Hadoop J HBase J Kafka
使用 explode + split,将course列拆分后转成多行
select name, c
from teacher_course
lateral view
explode(split(course,',')) tmp as c;
自定义函数
- UDF 一进一出。 如:upper lower substr
- UDAF 多进一出 。 如:sum …
- UDTF 一进多出。 如:explode
准备函数体并打jar包
- 创建maven工程导入依赖:
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>3.1.2</version>
</dependency>
- 创建 自定义UDF类继承自 UDF
// 自定义一个 add_random()函数,在传入的参数后增加一个随机整数
public class AddRandomUDF extends org.apache.hadoop.hive.ql.exec.UDF {
static Random random = new Random();
// 方法名必须是evaluate,打包后hive会设别和执行
public String evaluate(String str){
if (str == null){
return null;
}
str += random.nextInt(10);
return str;
}
}
-
maven package 打jar包到当前工程target下,上传此jar包至linux
~/lib/hive_demo-1.0-SNAPSHOT.jar
在hive中创建函数
方式一:临时函数 add jar
启动hive,并add jar
[liqiang@Gargantua bin]$ hive
hive > add jar /home/liqiang/lib/hive_demo-1.0-SNAPSHOT.jar;
创建临时函数:【作用当前会话】
hive > CREATE TEMPORARY FUNCTION add_random AS "com.gargantua.udf.AddRandomUDF";
现在可以在当前会话中同使用内置函数一样使用 add_random()
hive > select add_random('123') from my_table;
此方式需要在使用前 add jar 并 CREATE FUNCTION。可以将这两步命令写在文件中,启动hive同时指定初始化这个文件
[liqiang@Gargantua bin]$ hive -i [这个文件]
方式二:临时函数 auxlib/xxx.jar
-
${HIVE_HOME}/auxlib目录下的jar会自动被hive关联,于是可以省掉 add jar这一步。
创建 auxlib 目录,并复制一份jar到 auxlib/ -
启动hive,并创建函数 【作用当前会话】
hive > CREATE TEMPORARY FUNCTION add_random AS "com.gargantua.udf.AddRandomUDF";
方式三:持久函数
参考:
CREATE FUNCTION [db_name.]function_name AS class_name [USING JAR|FILE|ARCHIVE 'file_uri' [, JAR|FILE|ARCHIVE 'file_uri'] ];
-
jar 包不能存在本地了。需要上传hdfs。
[liqiang@Gargantua data]$ hdfs dfs -put ~/lib/hive_demo-1.0-SNAPSHOT.jar /lib/
-
创建持久函数。 【作用所有会话】
hive > CREATE FUNCTION add_random AS "com.gargantua.udf.AddRandomUDF" > USING JAR "hdfs://gargantua:9000/lib/hive_demo-1.0-SNAPSHOT.jar";
方式四:IDEA导入Hive源码编译并创建UDF
参考下一篇:https://blog.csdn.net/qq_45494908/article/details/122379634