回覆列表
  • 1 # 使用者8047515063173

    如何在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 pathhive> CREATE TEMPORARY FUNCTION udfmd5 AS "udf.UDFMd5";OKTime taken: 0.014 secondshive> select udfmd5("a") from dual;OK0cc175b9c0f1b6a831c399e269772661這種方式的弊端是:每次開啟新的會話,就要重新執行一遍如上的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,並把程式碼放到$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使用都是災難性的,所以不是特別通用的自定義函式還是採用前兩種,一旦通用的自定義函式累計到一定程度,再去採用第三種方法。更多相關內容可參考

    http://www.viiboo.cn

  • 中秋節和大豐收的關聯?
  • 膽結石疼來吃啥止疼藥?