美文网首页hive
hive之udf函数的使用

hive之udf函数的使用

作者: 傻疯子 | 来源:发表于2021-12-16 16:29 被阅读0次

    简单介绍

    udf的全称是User Defined Function用户自定义函数,创建后可以直接在select语句中使用

    使用中需要注意的是,创建一个udf需要继承org.apache.hadoop.hive.ql.exec.UDF,并且要对evaluate进行overwrite

    开发流程

    所以开发工程需要至少加上依赖包

            <dependency>
                <groupId>org.apache.hive</groupId>
                <artifactId>hive-exec</artifactId>
                <version>(填上版本号)</version>
                <scope>provided</scope>
            </dependency>
    

    然后创建一个类继承UDF,实现evaluate方法可以实现传入一个数据返回一个数据的效果

    下面以信息脱敏为例

    package com.sfz;
    import org.apache.hadoop.hive.ql.exec.UDF;
    public class Desensitization extends UDF {
    
    
        public String evaluate(String information) {
                   String desInformation =  information;
            /**
             *按照自定的规则用java对desInformation进行处理
             */
    
                 return desInformation;
    
        }
    }
    

    以上通过调用函数传入信息,然后数据处理后会返回一个脱敏信息。

    接着需要用maven对这个进行package,生成jar包,将文件上传到服务器上。

    创建函数

    以下流程注意登陆账户是否有权限

    并建议将此jar包上传到分布式文件系统上,可以参考如下命令:
    hdfs dfs -put /home/hive-udf/desensitization.jar /lib/hive_udf/
    然后可以通过hdfs dfs -ls /lib/hive_udf/查看已上传成功的包

    然后进入hive客户端:可以直接在服务器上使用hive的bin包下的hive进行直接连接,也可以是其他连接方式。

    这里有两种方法进行创建,一个是创建临时函数,一个是创建永久函数
    1.创建临时函数
    用此种方式的话,请在sql前加上后面两句
    add jar hdfs:///lib/hive_udf/desensitization.jar;
    create temporary function desensitization as 'com.sfz.Desensitization';
    注意:这里的desensitization为以后调用的函数名,com.sfz.Desensitization为jar包里的类路径。
    然后可以进行测试
    select desensitization("我是傻疯子");
    最后删除命令为:(临时函数可以不用删除,窗口关闭后会消失)
    drop temporary function desensitization;

    2.创建永久函数
    CREATE FUNCTION udf.desensitization AS 'com.sfz.Desensitization' USING JAR 'hdfs:///lib/hive_udf/desensitization.jar';
    删除命令为DROP FUNCTION IF EXISTS udf.desensitization;
    如果需要全局生效,目前来看需要重启hive,否则只对当前客户端有效。

    相关文章

      网友评论

        本文标题:hive之udf函数的使用

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