• HIVE如何使用自定义函数


    HIVE提供了很多函数,但这些函数只能满足一般的需求,针对复杂的业务分析,需要自己开发适合业务需求的函数。如何开发HIVE的UDF/UDAF/UDTF,请参看如下博客介绍的自定义函数的模板: http://hugh-wangp.iteye.com/blog/1472371

     
    如何在HIVE中使用自己定义的函数,可以有几种方式:
    1.在HIVE会话中add 自定义函数的jar文件,然后创建function,继而使用函数
    2.在进入HIVE会话之前先自动执行创建function,不用用户手工创建
    3.把自定义的函数写到系统函数中,使之成为HIVE的一个默认函数,这样就不需要create temporary function

    1.在HIVE会话中add 自定义函数的jar文件,然后创建function,继而使用函数
    hive> ADD JAR /home/hugh.wangp/UDFMd5.jar;
    Added /home/hugh.wangp/UDFMd5.jar to class path
    hive> CREATE TEMPORARY FUNCTION udfmd5 AS 'udf.UDFMd5';
    OK
    Time taken: 0.014 seconds
    hive> select udfmd5('a') from dual;
    OK
    0cc175b9c0f1b6a831c399e269772661

    这种方式的弊端是:每次打开新的会话,就要重新执行一遍如上的add jar和create temporary function的命令。对普通的业务分析人员未免要求太高。第二种方法可以把业务人员释放出来


    2.在进入HIVE会话之前先自动执行创建function
    HIVE命令有个参数-i:在进入会话,待用户输入自己的HQL之前,先执行-i的参数。我们只需要把add jar和create temporary function的命令写到一个文件中,并把这个文件传到-i的参数,如此一来省去了每次要手工创建的工作。
    但是这种方式也有个弊端,当我增添HIVE的gateway,就要拷贝一份这个文件,有时候遗漏真是不可避免的。第三种方法应该就是一个终极方案,只要HIVE本身代码不做修改,或者不删除特定的功能,这个函数就能一直用,而且可以把他作为HIVE的默认函数那样使用

    3.把自定义的函数写到系统函数中,使之成为HIVE的一个默认函数
    a.编写自己的UDF/UDAF/UDTF(如何编写可参考:http://hugh-wangp.iteye.com/blog/1472371),并把代码放到$HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/udf/路径下
    b.修改$HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java
    以HIVE自带函数Trim()举例,自定义函数操作一样。
    第一步:
    写UDF代码UDFTrim.java并放到$HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/udf/UDFTrim.java
    第二步:
    修改$HIVE_HOME/src/ql/src/java/org/apache/hadoop/hive/ql/exec/FunctionRegistry.java文件
    a.import org.apache.hadoop.hive.ql.udf.UDFTrim;
    b.registerUDF("trim", UDFTrim.class, false);

    虽然这种方法是一劳永逸的方法,但是一旦错了,对整个HIVE使用都是灾难性的,所以不是特别通用的自定义函数还是采用前两种,一旦通用的自定义函数累计到一定程度,再去采用第三种方法。

  • 相关阅读:
    测试用例设计白皮书--测试用例设计综合策略
    流程控制
    与用户交互,格式化输出,基本运算符
    jupyter的安装
    python程序运行的方式、变量、注释、内存管理、数据类型
    博客园 文章爬取(乱写的,有的爬不下来)
    Python 九九乘法表打印
    Python 爬歌曲
    redis快速入门
    UDPsocket编程
  • 原文地址:https://www.cnblogs.com/tangtianfly/p/2756745.html
Copyright © 2020-2023  润新知