Hive 函数
内置函数
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF
-
查看系统自带的函数
hive> show functions;
-
显示自带的函数的用法
hive> desc function upper;
-
详细显示自带的函数的用法
hive> desc function extended upper;
4:常用内置函数
#字符串连接函数: concat
select concat('abc','def’,'gh');
#带分隔符字符串连接函数: concat_ws
select concat_ws(',','abc','def','gh');
#cast类型转换
select cast(1.5 as int);
#get_json_object(json 解析函数,用来处理json,必须是json格式)
select get_json_object('{"name":"jack","age":"20"}','$.name');
#URL解析函数
select parse_url('http://facebook.com/path1/p.php?k1=v1&k2=v2#Ref1', 'HOST');
#explode:把map集合中每个键值对或数组中的每个元素都单独生成一行的形式
自定义函数
概述:
- Hive 自带了一些函数,比如:max/min等,当Hive提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF).
- 根据用户自定义函数类别分为以下三种:
- UDF(User-Defined-Function)
- 一进一出
- UDAF(User-Defined Aggregation Function)
- 聚集函数,多进一出
- 类似于:
count
/max
/min
- UDTF(User-Defined Table-Generating Functions)
- 一进多出
- 如
lateral
view
explore()
- UDF(User-Defined-Function)
- 编程步骤:
- 继承org.apache.hadoop.hive.ql.UDF
- 需要实现evaluate函数;evaluate函数支持重载;
- 注意事项
- UDF必须要有返回类型,可以返回null,但是返回类型不能为void;
- UDF中常用Text/LongWritable等类型,不推荐使用java类型;
6.2.2 UDF 开发实例
Step 1 创建 Maven 工程
<dependencies>
<!-- https://mvnrepository.com/artifact/org.apache.hive/hive-exec -->
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-exec</artifactId>
<version>2.7.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
<dependency>
<groupId>org.apache.hadoop</groupId>
<artifactId>hadoop-common</artifactId>
<version>2.7.5</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>
</plugins>
</build>
Step 2 开发 Java 类集成 UDF
public class MyUDF extends UDF{
public Text evaluate(final Text str){
String tmp_str = str.toString();
if(str != null && !tmp_str.equals("")){
String str_ret = tmp_str.substring(0, 1).toUpperCase() + tmp_str.substring(1);
return new Text(str_ret);
}
return new Text("");
}
}
Step 3 项目打包,并上传到hive的lib目录下
Step 4 添加jar包
重命名我们的jar包名称
cd /export/servers/apache-hive-2.7.5-bin/lib
mv original-day_10_hive_udf-1.0-SNAPSHOT.jar my_upper.jar
hive的客户端添加我们的jar包
add jar /export/servers/apache-hive-2.7.5-bin/lib/my_upper.jar;
Step 5 设置函数与我们的自定义函数关联
create temporary function my_upper as 'cn.itcast.udf.ItcastUDF';
Step 6 使用自定义函数
select my_upper('abc');