Hive函數
1.1、內置函數
內容較多,見《Hive官方文檔》
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
1)查看系統自帶的函數
hive> show functions;
2)顯示自帶的函數的用法
hive>desc function upper;
3)詳細顯示自帶的函數的用法
hive>desc function extended upper;
1.2Hive自定義函數
1)Hive 自帶了一些函數,比如:max/min等,但是數量有限,自己可以通過自定義UDF來方便的擴展。
2)當Hive提供的內置函數無法滿足你的業務處理需要時,此時就可以考慮使用用戶自定義函數(UDF:user-defined function)。
3)根據用戶自定義函數類別分爲以下三種:
(1)UDF(User-Defined-Function)
一進一出
(2)UDAF(User-Defined Aggregation Function)
聚集函數,多進一出
類似於:count/max/min
(3)UDTF(User-Defined Table-Generating Functions)
一進多出
如lateral view explore()
4)官方文檔地址
https://cwiki.apache.org/confluence/display/Hive/HivePlugins
5)編程步驟:
(1)繼承org.apache.hadoop.hive.ql.UDF
(2)需要實現evaluate函數;evaluate函數支持重載;
6)注意事項
(1)UDF必須要有返回類型,可以返回null,但是返回類型不能爲void;
(2)UDF中常用Text/LongWritable等類型,不推薦使用java類型;
1.3、UDF開發實例
簡單UDF示例
第一步:創建maven java 工程,導入jar包
pom文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>bigdata_12</artifactId>
<groupId>cn.itcast.bigdata</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>day06_hiveudf</artifactId>
<repositories>
<repository>
<id>cloudera</id>
<url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.6.0-cdh5.14.0</version>
</dependency>
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>1.1.0-cdh5.14.0</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*/RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
|
第二步:開發java類繼承UDF,並重載evaluate方法
package cn.itcast.hive.udf;
import org.apache.hadoop.hive.ql.exec.UDF;
import org.apache.hadoop.io.Text;
public class MyUDF extends UDF {
/**
* 繼承UDF這個類 然後重寫evalute這個方法,方法的參數就是
* 我們傳入進來的數據
* @param line
* @return
*/
public Text evaluate(final Text line){
if(null != line && !line.toString().equals("")){
//將我們的一行數據轉換成大寫
String str = line.toString().toUpperCase();
line.set(str);
return line;
}
line.set("");
return line;
}
}
|
第三步:將我們的項目打包,並上傳到hive的lib目錄下
第四步:添加我們的jar包
重命名我們的jar包名稱
cd /export/servers/hive-1.1.0-cdh5.14.0/lib
mv original-day_06_hive_udf-1.0-SNAPSHOT.jar udf.jar
hive的客戶端添加我們的jar包
add jar /export/servers/hive-1.1.0-cdh5.14.0/lib/udf.jar;
第五步:設置函數與我們的自定義函數關聯
create temporary function tolowercase as 'cn.itcast.udf.ItcastUDF';
第六步:使用自定義函數
select tolowercase('abc');