hive之UDF,UDAF,UDTF

自定义UDF步骤:
1)创建一个 java 工程,并创建一个 lib 文件夹
2)将 hive 的 jar 包解压后,将 apache-hive-1.2.1-bin\lib 文件下的 jar 包都拷贝到 java 工程中。
3)创建一个类

package com.qianfeng.hive;
import org.apache.hadoop.hive.ql.exec.UDF; public class Lower extends UDF {
public String evaluate (final String s) {
if (s == null) {
return null;
}
return s.toString().toLowerCase();
}
}

4)打成 jar 包上传到服务器/opt/module/jars/udf.jar
5)将 jar 包添加到 hive 的 classpath
hive (default)> add jar /opt/module/datas/udf.jar;
6)创建临时函数与开发好的 java class 关联
hive (default)> create temporary function my_lower as “com.qianfeng.hive.Lower”;
7)即可在 hql 中使用自定义的函数 strip
hive (default)> select ename, my_lower(ename) lowername from emp;
UDAF案例:
聚集函数,多进一出
在这里插入图片描述
创建表及数据导入:

create table person_info(
name string, constellation string, blood_type string)
row format delimited fields terminated by "\t";

load data local inpath “person_info.tsv” into table person_info;

例如:把星座和血型一样的人归类到一起

select
t1.base,
concat_ws('|', collect_set(t1.name)) name
from
(select
name,
concat(constellation, ",", blood_type) base
from
person_info) t1
group by
t1.base;

输出结果:
在这里插入图片描述UDTF案例:
一进多出
在这里插入图片描述
创建表及导入数据:

create table movie_info(
 movie string,
category array<string>)
row format delimited fields terminated by "\t" collection items terminated by ",";

load data local inpath "movie_info.tsv" into table movie_info;

例如:将电影分类中的数组数据展开

select
movie, category_name
from
movie_info lateral view explode(category) table_tmp as category_name;

输出结果:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值