Hive自定义函数UDF编写

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
实时计算 Flink 版,5000CU*H 3个月
实时数仓Hologres,5000CU*H 100GB 3个月
简介: Hive自定义函数UDF编写

Hive UDF 开发

pom.xml依赖

<dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>3.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>3.1.2</version>
        </dependency>

代码

public class TestUDF extends UDF {
   

    // 参数列表可以使用多个参数
    public Text evaluate(Text s1) {
   
        String retsult = s1.toString().toUpperCase();
        return new Text(retsult);
    }
}

函数安装

临时函数

添加jar包到hive

add jar /home/hadoop/xxx-udf-1.0.0.jar;

hive> add jar /home/hadoop/xxx-udf-1.0.0.jar;
Added [/home/hadoop/xxx-udf-1.0.0.jar] to class path
Added resources: [/home/hadoop/xxx-udf-1.0.0.jar]
将自己写的类创建为函数

create temporary function mytest as 'com.xxx.udf.TestUDF';

查看所有可用函数
show functions;
使用UDF函数
hive> select mytest('Aa');
OK
AA
删除函数
drop temporary function mytest;
验证函数
select mytest("1","2");

UDF执行了多次问题

注意:这种验证会导致函数调用了三次,与hive执行流程有关;

传入固定的值就会执行多次,通过SQL查询则无该问题

select mytest("1",word) from keywords limit 1;这种执行只会执行一次;

https://blog.csdn.net/xiao_jun_0820/article/details/53258414

永久函数

将jar包上传HDFS
hdfs dfs -put udf-1.0.0.jar /
在Hive命令行中创建永久函数
create function testUDF as 'com.xxx.udf.xxxUDF' using jar 'hdfs:/udf-1.0.0.jar';
查看函数

在Hive的MySQL中查询

MySQL [hivemetastore]> select * from FUNCS;
+---------+------------------------+-------------+-------+-----------+-----------+------------+------------+
| FUNC_ID | CLASS_NAME             | CREATE_TIME | DB_ID | FUNC_NAME | FUNC_TYPE | OWNER_NAME | OWNER_TYPE |
+---------+------------------------+-------------+-------+-----------+-----------+------------+------------+
|       1 | com.udf.xxxUDF |  1670403856 |     1 | testUDF     |         1 | NULL       | USER       |
+---------+------------------------+-------------+-------+-----------+-----------+------------+------------+
查看函数详细信息
hive> desc function extended oneid;
Added [/data/emr/hive/tmp/54b84fca-bc3f-4dd5-9a80-13577e3979cf_resources/udf-1.0.0.jar] to class path
Added resources: [hdfs:/udf-1.0.0.jar]
OK
There is no documentation for function 'oneid'
Function class:com.xxx.udf.UDF
Function type:PERSISTENT
Resource:hdfs:/udf-1.0.0.jar
Time taken: 0.113 seconds, Fetched: 4 row(s)
删除函数
drop function testUDF;

https://zhuanlan.zhihu.com/p/401569063

目录
相关文章
|
6月前
|
SQL 存储 Java
Hive【Hive(八)自定义函数】
Hive【Hive(八)自定义函数】
|
6月前
|
SQL 存储 Java
Hive UDF UDTF UDAF 自定义函数详解
Hive UDF UDTF UDAF 自定义函数详解
119 2
Hive UDF UDTF UDAF 自定义函数详解
|
2月前
|
SQL JavaScript 前端开发
Hive根据用户自定义函数、reflect函数和窗口分析函数
Hive根据用户自定义函数、reflect函数和窗口分析函数
33 6
|
6月前
|
SQL 缓存 Java
Hive 之 UDF 运用(包会的)
Hive的UDF允许用户自定义数据处理函数,扩展其功能。`reflect()`函数通过Java反射调用JDK中的方法,如静态或实例方法。例如,调用`MathUtils.addNumbers()`进行加法运算。要创建自定义UDF,可以继承`GenericUDF`,实现`initialize`、`evaluate`和`getDisplayString`方法。在`initialize`中检查参数类型,在`evaluate`中执行业务逻辑。最后,打包项目成JAR,上传到HDFS,并在Hive中注册以供使用。
150 2
|
6月前
|
SQL Java 程序员
Hive反射函数的使用-程序员是怎么学UDF函数的
Hive反射函数的使用-程序员是怎么学UDF函数的
41 0
|
6月前
|
SQL Java 数据处理
【Hive】Hive的函数:UDF、UDAF、UDTF的区别?
【4月更文挑战第17天】【Hive】Hive的函数:UDF、UDAF、UDTF的区别?
|
6月前
|
SQL 消息中间件 Apache
Flink报错问题之使用hive udf函数报错如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
|
6月前
|
SQL 搜索推荐 Java
Hive中的UDF是什么?请解释其作用和使用方法。
Hive中的UDF是什么?请解释其作用和使用方法。
91 0
|
SQL Java Shell
56 Hive自定义函数和Transform
56 Hive自定义函数和Transform
96 0
|
SQL 分布式计算 Java
阿里云MaxCompute-Hive UDF(Java)迁移上云实践
阿里云MaxCompute-Hive UDF(Java)迁移上云实践