溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Hive如何自定義函數(shù)實現(xiàn)創(chuàng)建臨時函數(shù)和永久函數(shù)

發(fā)布時間:2021-12-10 14:13:43 來源:億速云 閱讀:1203 作者:小新 欄目:大數(shù)據(jù)

小編給大家分享一下Hive如何自定義函數(shù)實現(xiàn)創(chuàng)建臨時函數(shù)和永久函數(shù),相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

1 先創(chuàng)建函數(shù)類文件   
    1.1  使用IDEA創(chuàng)建maven項目,創(chuàng)建HelloUDF類
Hive如何自定義函數(shù)實現(xiàn)創(chuàng)建臨時函數(shù)和永久函數(shù)    
    1.2  運行HelloUDF類,測試是否成功
Hive如何自定義函數(shù)實現(xiàn)創(chuàng)建臨時函數(shù)和永久函數(shù)
    1.3  將HelloUDF類打成jar包。
Hive如何自定義函數(shù)實現(xiàn)創(chuàng)建臨時函數(shù)和永久函數(shù)2 創(chuàng)建函數(shù)
    2.1  創(chuàng)建臨時函數(shù)
        臨時函數(shù)僅對當前session(黑窗口)有效。
        2.1.1 添加jar包的兩種方法
            方法一: add jar /home/hadoop/lib/hive-1.0-SNAPSHOT.jar;
            方法二: 在hive的文件夾下面創(chuàng)建auxlib文件夾,將jar包上傳到auxlib文件夾下面,重啟hive。         2.1.2 創(chuàng)建臨時函數(shù)
             語法:CREATE TEMPORARY FUNCTION function_name AS class_name;  
                    function_name函數(shù)名   
                    class_name 類路徑,包名+類名
             實例:
            -- 創(chuàng)建sayhello函數(shù)
            hive> create temporary function sayhello as 'com.ruozedata.bigdata.HelloUDF';
            OK
            Time taken: 0.087 seconds
            hive>              -- 查看函數(shù)列表
            hive> show functions;
            OK
            abs
            acos
            add_months
            sayhello
            hive>              -- 測試使用函數(shù)
            hive> select sayhello('zhang','san') from dual ;
            OK
            Hello:zhang : san
            Time taken: 0.558 seconds, Fetched: 1 row(s)
            hive>          2.1.3 刪除臨時函數(shù)
            語法:DROP TEMPORARY FUNCTION [IF EXISTS] function_name;
            實例:
            hive> DROP TEMPORARY FUNCTION IF EXISTS sayhello;
            OK
            Time taken: 0.015 seconds
            hive>      2.2  創(chuàng)建永久函數(shù) 
        2.2.1 創(chuàng)建永久函數(shù)的語法:
            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上的根目錄下創(chuàng)建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 創(chuàng)建永久函數(shù): 
            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>              -- 查看函數(shù)列表 
            hive> show functions;
            OK
            abs
            acos
            add_months
            ruozedata.sayhello
            hive> 
            ruozedata.sayhello函數(shù)創(chuàng)建成功。永久函數(shù)是已:庫名.函數(shù)名的存在,同庫使用的時候可以直接用函數(shù)名,不同庫使用的時候需要帶上庫名             -- 測試函數(shù)
            hive> select sayhello("ruozedata") from dual ;
            OK
            Hello:ruozedata
            Time taken: 0.145 seconds, Fetched: 1 row(s)
            hive>          2.2.4 在MySQL庫里面查看函數(shù)信息 
Hive如何自定義函數(shù)實現(xiàn)創(chuàng)建臨時函數(shù)和永久函數(shù)


注意:
臨時函數(shù)和永久函數(shù)的區(qū)別:臨時函數(shù)僅對當前session(黑窗口)有效。永久函數(shù)是全局的。

以上是“Hive如何自定義函數(shù)實現(xiàn)創(chuàng)建臨時函數(shù)和永久函數(shù)”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經查實,將立刻刪除涉嫌侵權內容。

AI