美文网首页
Hive之函数

Hive之函数

作者: Movle | 来源:发表于2020-05-09 17:14 被阅读0次

    目录
        1.1 系统自带的函数
        1.2 自定义函数
        1.3 自定义UDF函数开发案例

    1.1 系统自带的函数

    1.查看系统自带的函数

    hive> show functions;
    

    2.显示自带的函数的用法

    hive> desc function upper;
    

    3.详细显示自带的函数的用法

    hive> desc function extended upper;
    

    1.2 自定义函数

    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.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.3 自定义UDF函数开发案例

    1.创建一个maven工程:

    2.将hive的jar包解压后,将apache-hive-1.2.1-bin\lib文件下的jar包都拷贝到java工程中。

    2.添加pomy依赖:

    pom.xml

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

    3.创建一个类

    package HiveUDF;
    import org.apache.hadoop.hive.ql.exec.UDF;
    
    public class Lower extends UDF {
    
        public String evaluate (final String s) {
            
            if (s == null) {
                return null;
            }
            
            return s.toString().toLowerCase();
        }
    }
    

    4.打成jar包上传到服务器/opt/module/jars/Hive-1.0-SNAPSHOT.jar

    (1)打包:

    (2)上传:

    上传

    5.将jar包添加到hive的classpath

    hive (default)> add jar /opt/module/jars/Hive-1.0-SNAPSHOT.jar ;
    

    6.创建临时函数与开发好的java class关联(全类名)

    hive (default)> create temporary function udf_lower as "HiveUDF.Lower";
    

    7.即可在hql中使用自定义的函数strip

    hive (default)> select ename, udf_lower(ename) lowername from emp;
    

    相关文章

      网友评论

          本文标题:Hive之函数

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