Hive-函數(二)自定義UDF函數開發案例
1.創建一個java工程
2.Settings找到自己的Maven
3.pom.xml配置文件
接着將之前項目中配好的pom.xml配置內容復制過來--》自動加載(右下角的小標簽中的第一個)
4.加載hive的依賴
1)百度上搜maven--》進入官網 https://mvnrepository.com/search?q=Maven
2)搜Maven--》選左側欄中的org.apache--》點進第一個Hive Query Language
3)選擇1.2.1版本的:
4)復制這個依賴到pom.xml文件里:
5.代碼實現自定義-UDF函數
1)創建包、一個類--》自寫代碼:
package hive; import org.apache.hadoop.hive.ql.exec.UDF; public class UDF_Lower extends UDF { public String evaluate(final String s){ if(s==null){ return null; } return s.toLowerCase(); } } |
2)通過Maven打成jar包:clean--》package
上傳到/opt/module/hive-1.2.1/lib目錄下
3)加載自定義函數
(1)加載上臨時函數的jar包
hive (default)> add jar /opt/module/hive-1.2.1/lib/hive-1.0-SNAPSHOT.jar;
Added [/opt/module/hive-1.2.1/lib/hive-1.0-SNAPSHOT.jar] to class path
Added resources: [/opt/module/hive-1.2.1/lib/hive-1.0-SNAPSHOT.jar]
(2)創建臨時函數-與開發好的java class關聯(全類名)
這里的全類名就是:右鍵自定義的類--》選擇Copy Reference--》粘貼上
hive (default)> create temporary function udf_lower as "hive.UDF_Lower";
4)即可在hql中使用自定義的函數strip
hive (default)> select ename, udf_lower(ename) lowername from emp;
解釋: select ename `大寫`, udf_lower(ename) `小寫` from emp;
比如在/opt/module/hiveTest/目錄下先創建一個文件stu1,里面內容是:
JAVA
LINUX
Hadoop
hdfs
MR
Yarn
ZOOKeeper
Flume
Hive
然后再創建一個表-stu1:
hive (default)> create table stu1
> (name string)
> row format delimited fields terminated by '\t';
接着加載數據到stu1表中:
hive (default)> load data local inpath '/opt/module/hiveTest/stu1' into table stu1;
接着使用自定義函數:
hive (default)> select name,udf_lower(name) lowername from stu1;
OK
name lowername
JAVA java
LINUX linux
Hadoop hadoop
hdfs hdfs
MR mr
Yarn yarn
ZOOKeeper zookeeper
Flume flume
Hive hive
Time taken: 0.31 seconds, Fetched: 9 row(s)