美文网首页
Hive自定义UDF函数

Hive自定义UDF函数

作者: yannhuang | 来源:发表于2017-11-27 17:05 被阅读167次

在hive中,有时候一些内置的函数,和普通的查询操作已经满足不了我们要查询的要求,这时候可以自己写一些自定义函数来处理。自定义函数(user defined function =UDF)

由于hive本身是用java语言开发,所以udf必须用java来写才可以。

Hive中有三种UDF

  1. 普通udf(UDF)
    操作单个数据行,且产生一个数据作为输出。例如(数学函数,字符串函数)
  2. 聚合udf (UDAF)
    接受多个数据行,并产生一个数据行作为输出。例如(COUNT,MAX函数等)
  3. 表生成UDF(UDTF)
    接受一个数据行,然后返回产生多个数据行(一个表作为输出)。比如lateral view(据说是一个将行转成列的函数)。

编写UDF必须满足一下:

  1. 必须是org.apache.hadoop.hive.ql.exec.UDF的子类
  2. 必须实现evaluate函数。

下面展示如何编写一个普通的UDF

1、编写类,继承UDF类,重写evaluate方法

import java.text.SimpleDateFormat;
import java.util.Date;

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

public class TimeDiff extends UDF {
    
    public String evaluate(String endTime, String startTime, String format) {
        SimpleDateFormat dfs = new SimpleDateFormat(format);
        
        long diff = 0;
        Date end = null;
        Date start = null;
        try {
            end = dfs.parse(endTime);
            start = dfs.parse(startTime);
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
        
        diff = (end.getTime() - start.getTime());
        return Long.toString(diff);
    }
    
    public String evaluate(String endTime, String startTime) {
        String format = "yyyyMMdd";
        return evaluate(endTime, startTime, format);
    }
}

2、 打包后上传到客户端所在的目录

3、使用该函数前,需要执行以下两行命令:

ADD JAR /home/hadoop/hive/hive-udf.jar;

CREATE TEMPORARY FUNCTION time_diff AS 'cn.splus.hiveudf.dateutil.TimeDiff';

4、在sql中使用该函数

select year, time_diff(date1, date2) from table;  

相关文章

  • Hive从入门到精通8:Hive自定义函数(UDF)

    1.什么是Hive UDF? Hive中的用户自定义函数(即User Defined Function,简称UDF...

  • Hive- UDF&GenericUDF

    hive udf简介 在Hive中,用户可以自定义一些函数,用于扩展HiveQL的功能,而这类函数叫做UDF(用户...

  • 【Hive】Hive UDF

    [TOC] 一、UDF 介绍 UDF(User-Defined Functions)即是用户自定义的hive函数。...

  • Hive 用户自定义函数 UDF,UDAF

    Hive有UDF:(普通)UDF,用户自定义聚合函数(UDAF)以及用户自定义生表函数(UDTF)。它们所接受的输...

  • Hive的UDF编程-GenericUDF编程

    UDF简介 在Hive中,用户可以自定义一些函数,用于扩展HiveQL的功能,而这类函数叫做UDF(用户自定义函数...

  • Hive开发自定义函数UDF

    Hive 内置函数 Hive自定义函数 UDF(User-Defined-Function) 一进一出 UDAF(...

  • 学习中的关键的问题

    hive中的topn操作需要使用到hive的窗口函数执行操作的。 spark的udf可以实现自定义的udf的函数的...

  • Hive 自定义函数 UDF

    Hive 自定义函数 UDF UDF:用户定义(普通)函数,只对单行数值产生作用; UDF只能实现一进一出的操作。

  • hive积累大全

    此篇内容:hive自定义函数UDF、UDTF,压缩存储方式,hive优化、hive实际编程SQL中的if表达式用法...

  • Hive的UDF函数

    【前言】常见的数据库都有函数,hive自身也有函数。分为内置函数和自定义的UDF函数,自定义函数例如(sum 、c...

网友评论

      本文标题:Hive自定义UDF函数

      本文链接:https://www.haomeiwen.com/subject/uvudbxtx.html