HiveSQL实战积累_hiveUDF原理与使用
1.Hive的简单实现方法
简单实现方法步骤:
1.新建maven项目,在pom.xml文件中添加hiveUDF依赖:
1 | <dependency> |
2.新建UDF实现类继承UDF类,实现evaluate抽象方法:
1 | package hive.udf; |
3.打成jar包上传至hive的lib路径下,并赋权:
1 | [peizk@hadoop lib]$ chmod 777 UdfTest-1.0.jar |
4.进入hive客户端,执行添加jar包命令:
1 | hive (default)> add jar /home/peizk/app/hive-3.1.2/lib/UdfTest-1.0.jar; |
添加之后可以使用list jars查看添加的jar,确认是否添加成功:
1 | hive (default)> list jars; |
5.在hive客户端执行创建临时函数命令:
1 | hive (default)> create temporary function say_hello as "hive.udf.UDFHello"; |
6.在hiveSQL或者sparkSQL中使用该udf:
1 | hive (default)> select say_hello('peizk'); |
上述简单实现方法中,只是创建了临时函数,一旦退出hive客户端,再次进入hive客户端就没法儿再次使用该UDF函数了。如果想要一次添加多次使用可以通过两种方法实现:1.UDF函数注册到元数据,2.编译服务端源码。
2.商智常见使用方式
通常使用脚本的形式固化日常生产任务,一个脚本中就是一个日期动态的sql,那么直接将UDF jar包和生产脚本打包在一起,然后在生产脚本的sql中添加jar包并创建临时函数,然后使用UDF方法。
如下案例中编写了一个将真实数据进行指数化的UDF函数,用于进行真实数据脱敏,但是又能让下游进行趋势分析:
1 | #!/usr/bin/env python3 |
在sql逻辑前面根据jar在脚本中的路径添加jar包,并创建临时函数:add jar common/hive.jar; create temporary function tran_index as 'UDF.TranIndex';,然后就可以在后续sql中使用该临时函数tran_index(pv,17.37) as pv_index。