温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Hive如何自定义函数实现创建临时函数和永久函数

发布时间:2021-12-10 14:13:43 来源:亿速云 阅读:1118 作者:小新 栏目:大数据

小编给大家分享一下Hive如何自定义函数实现创建临时函数和永久函数,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1 先创建函数类文件   
    1.1  使用IDEA创建maven项目,创建HelloUDF类
Hive如何自定义函数实现创建临时函数和永久函数    
    1.2  运行HelloUDF类,测试是否成功
Hive如何自定义函数实现创建临时函数和永久函数
    1.3  将HelloUDF类打成jar包。
Hive如何自定义函数实现创建临时函数和永久函数2 创建函数
    2.1  创建临时函数
        临时函数仅对当前session(黑窗口)有效。
        2.1.1 添加jar包的两种方法
            方法一: add jar /home/hadoop/lib/hive-1.0-SNAPSHOT.jar;
            方法二: 在hive的文件夹下面创建auxlib文件夹,将jar包上传到auxlib文件夹下面,重启hive。         2.1.2 创建临时函数
             语法:CREATE TEMPORARY FUNCTION function_name AS class_name;  
                    function_name函数名   
                    class_name 类路径,包名+类名
             实例:
            -- 创建sayhello函数
            hive> create temporary function sayhello as 'com.ruozedata.bigdata.HelloUDF';
            OK
            Time taken: 0.087 seconds
            hive>              -- 查看函数列表
            hive> show functions;
            OK
            abs
            acos
            add_months
            sayhello
            hive>              -- 测试使用函数
            hive> select sayhello('zhang','san') from dual ;
            OK
            Hello:zhang : san
            Time taken: 0.558 seconds, Fetched: 1 row(s)
            hive>          2.1.3 删除临时函数
            语法:DROP TEMPORARY FUNCTION [IF EXISTS] function_name;
            实例:
            hive> DROP TEMPORARY FUNCTION IF EXISTS sayhello;
            OK
            Time taken: 0.015 seconds
            hive>      2.2  创建永久函数 
        2.2.1 创建永久函数的语法:
            CREATE FUNCTION [db_name.]function_name AS class_name
            [USING JAR|FILE|ARCHIVE 'file_uri' [, JAR|FILE|ARCHIVE 'file_uri'] ];
            file_uri:是hdfs上的jar包目录
        2.2.2 添加jar包的两种方法
            -- hdfs上的根目录下创建lib文件夹 
            [hadoop@hadoop002 lib]$ hadoop fs -mkdir /lib 
            18/06/29 16:39:40 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
            [hadoop@hadoop002 lib]$             -- 将jar包上传到hdfs上的/lib 文件夹下
            [hadoop@hadoop002 lib]$ hadoop fs -put /home/hadoop/lib/hive-1.0-SNAPSHOT.jar /lib/
            18/06/29 16:40:14 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
            [hadoop@hadoop002 lib]$             -- 查看jar
            [hadoop@hadoop002 lib]$ hadoop fs -lsr /lib
            lsr: DEPRECATED: Please use 'ls -R' instead.
            18/06/29 16:40:31 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
            -rw-r--r--   1 hadoop supergroup       3242 2018-06-29 16:40 /lib/hive-1.0-SNAPSHOT.jar
            [hadoop@hadoop002 lib]$         2.2.3 创建永久函数: 
            hive> CREATE FUNCTION sayhello AS 'com.ruozedata.bigdata.HelloUDF' USING JAR 'hdfs://hadoop002:9000/lib/hive-1.0-SNAPSHOT.jar';
            converting to local hdfs://hadoop002:9000/lib/hive-1.0-SNAPSHOT.jar
            Added [/tmp/22d50f26-5227-479e-9319-cb28985b8f5d_resources/hive-1.0-SNAPSHOT.jar] to class path
            Added resources: [hdfs://hadoop002:9000/lib/hive-1.0-SNAPSHOT.jar]
            OK
            Time taken: 0.207 seconds
            hive>              -- 查看函数列表 
            hive> show functions;
            OK
            abs
            acos
            add_months
            ruozedata.sayhello
            hive> 
            ruozedata.sayhello函数创建成功。永久函数是已:库名.函数名的存在,同库使用的时候可以直接用函数名,不同库使用的时候需要带上库名             -- 测试函数
            hive> select sayhello("ruozedata") from dual ;
            OK
            Hello:ruozedata
            Time taken: 0.145 seconds, Fetched: 1 row(s)
            hive>          2.2.4 在MySQL库里面查看函数信息 
Hive如何自定义函数实现创建临时函数和永久函数


注意:
临时函数和永久函数的区别:临时函数仅对当前session(黑窗口)有效。永久函数是全局的。

以上是“Hive如何自定义函数实现创建临时函数和永久函数”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI