hive2mysql的udf_hive使用UDF函数

UDF几个相关概念:

UDF: one-to-one row mapping : upper substr【进来一行出去一行】

UDAF: Aggregation   Many-to-one row mapping   比如sum/min【进来多行出去一行】

UDTF: Table-generating  one-to-many    比如:lateral view explode()【一对多】

编写UDF函数测试代码:

pod.xml添加hive:

1.1.0-cdh5.7.0

org.apache.hive

hive-exec

${hive.version}

HelloUDF.java:package com.ruozedata.hadoop.udf;

import org.apache.hadoop.hive.ql.exec.UDF;

public class HelloUDF extends UDF{

public String evaluate(String input) {

//TODO...此处为开发业务逻辑的地方

return "Hello:" + input;

}

//下面为测试代码

public static void main(String[] args) {

HelloUDF udf = new HelloUDF();

String output = udf.evaluate("测试数据");

System.out.println(output);

}

}

注:实现UDF函数的套路是一样的,第一步继承UDF函数,第二步重写evaluate方法

在idea中用maven打包后,上传到hive服务器;包名为:g6-hadoop-udf.jar

hive创建函数的几种方式:

方法一:创建临时函数(Temporary Functions)

官方参考:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-CreateFunction

缺点:Temporary Functions只对当前 session(窗口)有效

示例:在Hive的Shell中执行

ADD JAR /home/hadoop/lib/g6-hadoop-udf.jar;

CREATE TEMPORARY FUNCTION sayHello AS 'com.ruozedata.hadoop.udf.HelloUDF';

show functions;(执行此语句,可以看到sayHello在函数中)

select sayhello('abc') from dual;(输出的结果为:Hello:abc)

注:此种方式还有一个缺点是,jar需要每次手动add才能识别class_name

方法二:无需手动add jar包

在hive的家目录下创建auxlib目录,把jar包放在此目录下即可;

不管创建临时函数,还是持久函数,把jar放入auxlib后就无需手动进行加载;

方法三:创建持久函数(Permanent Functions),并且使用hdfs上的jar;生产建议此种方式

从hive 0.13开始,支持将函数注册到metastore中,存放的表为FUNCS(里边默认为空);

3426b2ca1c66be0efd9fa256c98ce003.png

将jar包放在hdfs的/lib目录下;

示例:在Hive的Shell中执行以下命令CREATE FUNCTION sayhello2 AS 'com.ruozedata.hadoop.udf.HelloUDF' USING JAR 'hdfs://ruozeclusterg6/lib/g6-hadoop-udf.jar';

注:此时可以任何窗口使用sayhello2函数(使用show functions无法查到,但在元数据的FUNCS表中可以看到)

查看mysql中hive库的FUNCS表;发现sayhello2已成功进行注册;

b592963101217ae10b8251b58882a063.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值