码迷,mamicode.com
首页 > 其他好文 > 详细

Hive(9)-自定义函数

时间:2018-12-21 21:17:11      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:java   ips   tab   extends   返回   需要   ase   tps   exist   

一. 自定义函数分类

当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数.

根据用户自定义函数类别分为以下三种:

1. UDF(User-Defined-Function) 一进一出

2. UDAF(User-Defined Aggregation Function) 聚集函数,多进一出, 类似于:count/max/min

3. UDTF(User-Defined Table-Generating Functions) 一进多出 如lateral view explore()

 

二.自定义步骤

官方文档地址: https://cwiki.apache.org/confluence/display/Hive/HivePlugins

1. 继承org.apache.hadoop.hive.ql.UDF

2. 需要实现evaluate函数

evaluate函数支持重载;

3. 在hive的命令行窗口创建函数

  1). 添加jar:  add jar linux_jar_path

  2). 创建function:  create [temporary] function [dbname.]function_name AS class_name;

删除: Drop [temporary] function [if exists] [dbname.]function_name;

tips: UDF必须要有返回类型,可以返回null,但是返回类型不能为void;

 

三. 自定义函数实例

1. 创建Maven工程

2.导入依赖

<dependencies>
        <!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec -->
        <dependency>
            <groupId>org.apache.hive</groupId>
            <artifactId>hive-exec</artifactId>
            <version>1.2.1</version>
        </dependency>
</dependencies>

3. 创建自定义类

package com.nty.udf;

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

/**
 * author nty
 * date time 2018-12-21 19:45
 */
public class Lower extends UDF {

    //返回str的小写  
    public String evaluate(String str) {
        if( null == str){
            return  null;
        }
        return str.toLowerCase();
    }

}

4. 使用maven打成jar包,并上传至/opt/module/jars目录下

5. 将jar包添加到hive的classpath

add jar /opt/module/datas/udf.jar;

6. 创建[临时]函数与开发好的java class关联

create temporary function ntylower as "com.nty.udf.Lower";

7. 使用

select ename, ntylower(ename) lowername from emp;

Hive(9)-自定义函数

标签:java   ips   tab   extends   返回   需要   ase   tps   exist   

原文地址:https://www.cnblogs.com/duoduotouhenying/p/10158653.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!