编写用户自定义函数,来满足默认函数不能满足的需求。
1.创建maven项目,导入相关依赖:
dependencies
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive- exec </artifactId>
<version>2.1.1</version>
</dependency>
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.3</version>
</dependency>
|
2.编写udf逻辑代码,需要继承UDF类,示例代码:
@Description(
name = "Long2Ip" ,
value = "_FUNC_(十进制Ip) - from the input string"
+ "or long,Returns the corresponding Ip address" ,
extended = "Example:\n"
+ " > SELECT _FUNC_(strIP) FROM src;\n"
+ " > SELECT _FUNC_(longIp) FROM src;"
)
public class Long2Ip extends UDF {
Text result = new Text();
public String evaluate(String strIP){
long longIp = Long.parseLong(strIP);
return this.evaluate(longIp);
}
public String evaluate(long longIP){
if (longIP<0||longIP>4294967295L){
result.set( "" );
} else {
result.set(IpIpUtil.LongToIp(longIP));
}
return result.toString();
}
}
|
注释说明:
@Description:方法描述可以通过describe function extended 方法名,来显示详细的帮助文档信息。
3.程序打包
4.上传IpTest-1.0.0.jar包到服务器上的指定路径下,启动hive:
5.hive加载jar包
hive>add jar /home/xxx/IpTest-1.0.0.jar;
|
6.创建临时方法:
hive>create temporary function long2IP as 'com.mfw.ip.udf.Long2Ip' ;
|
7.使用方法:
hive>select long2IP(ip) from src;
|