zoukankan      html  css  js  c++  java
  • Hive中的用户自定义函数

    1.1 关于自定义函数

    1)Hive 自带了一些函数,比如:max/min等,但是数量有限,自己可以通过自定义UDF来方便的扩展。

    2)当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)。

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

    ​ (1)UDF(User-Defined-Function)

    ​ 一进一出

    ​ (2)UDAF(User-Defined Aggregation Function)

    ​ 聚集函数,多进一出

    ​ 类似于:count/max/min

    ​ (3)UDTF(User-Defined Table-Generating Functions)

    ​ 一进多出

    ​ 如lateral view explore()

    4)官方文档地址

    https://cwiki.apache.org/confluence/display/Hive/HivePlugins

    5)编程步骤:

    ​ (1)继承org.apache.hadoop.hive.ql.exec.UDF

    ​ (2)需要实现evaluate函数;evaluate函数支持重载;

    ​ (3)在hive的命令行窗口创建函数

    ​ a)添加jar

    add jar linux_jar_path
    

    ​ b)创建function

    create [temporary] function [dbname.]function_name AS class_name;
    

    ​ (4)在hive的命令行窗口删除函数

    Drop [temporary] function [if exists] [dbname.]function_name;
    

    6)注意事项

    ​ (1)UDF必须要有返回类型,可以返回null,但是返回类型不能为void;

    1.2 案例实操

    1)定义了四个UDF类,代码见:GitHub

    使用方法:你可以选择在IDEA中checkout该项目,然后使用maven打成jar包后放置到hive的安装目录,“hive/lib”目录下

    如:

    2)在hive中执行add操作,添加所配置的jar包:

    hive (default)> add jar /opt/module/hive/lib/log-hive.jar;
    

    3)注册永久函数

    hive (default)>create function getdaybegin AS 'com.bigdata.hive.DayBeginUDF';
    
    hive (default)>create function getweekbegin AS 'com.bigdata.hive.WeekBeginUDF';
    
    hive (default)>create function getmonthbegin AS 'com.bigdata.hive.MonthBeginUDF';
    
    hive (default)>create function formattime AS 'com.bigdata.hive.FormatTimeUDF';
    

    4)验证函数

    ​ 由于我将Hive的元数据信息选择保存在MySQL中(Hive的Metastore默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore),所以选择登录mysql

    [bigdata@hadoop101 ~]$ mysql -uroot -p000000
    
    mysql> show databases;
    
    mysql> use metastore;
    
    mysql> show tables;
    
    mysql> select * from FUNCS;
    

    下面是我在Dbeaver中查看到的表的具体信息:

    可以发现四个自定义函数已经添加进去了。

    关于FUNC表字段的描述:

    5)删除函数

    hive (applogsdb)> drop function getdaybegin;
    
    hive (applogsdb)> drop function getweekbegin;
    
    hive (applogsdb)> drop function getmonthbegin;
    
    hive (applogsdb)> drop function formattime;
    

    6)注意:在哪个数据库中注册的永久函数,必须在哪个数据库下将该方法删除

    比如在applogsdb数据库中创建的方法,必须在该数据中调用drop方法才能实现删除功能。

  • 相关阅读:
    Leetcode Substring with Concatenation of All Words
    Leetcode Divide Two Integers
    Leetcode Edit Distance
    Leetcode Longest Palindromic Substring
    Leetcode Longest Substring Without Repeating Characters
    Leetcode 4Sum
    Leetcode 3Sum Closest
    Leetcode 3Sum
    Leetcode Candy
    Leetcode jump Game II
  • 原文地址:https://www.cnblogs.com/cosmos-wong/p/11992874.html
Copyright © 2011-2022 走看看