大数据---29.Hive 自定义函数

一 、Hive 自定义函数

当 Hive 提供的内置函数无法满足你的业务处理需要时,此时就可以考虑使用用户自定义函数(UDF:user-defined function)。常用来自定义的是 UDF、UDTF 函数。聚合函数 UDAF 能够满足我们使用的基本都已经内置了。此处就重点介绍自定义UDF函数和自定义UDTF函数。

1.1 函数分类

看到这里,常用的函数就介绍完毕了,当HQL中内置的函数不能满足我们的需求,Hive还为我们提供了自定义函数的方法,学习如何自定义函数前,我们先总结一下函数的分类
函数分为三大类
UDF:一进一出,UDF就类似我们的upper、substr函数
UDAF:多进一出,UDAF就是我们通常说的聚合函数,例如sum avg
UDTF:一进多出,UDTF就类似我们前面说的炸开函数,它可以将一行数据炸开为多列

1.2 实现思路

hive的函数无非也就是一个逻辑的封装,可以接收参数,返回结果,跟java中的方法本质上没有区别。

hive就允许用户开发一个java的方法,来实现你想要的函数的功能;

然后在hive中定义一个自己命名的函数,并将这个函数跟你的java方法所在的类关联起来即可。

1.3 实现步骤
1.3.1自定义函数步骤

1.创建一个 Maven 工程,导入 hive-exec jar 依赖

org.apache.hive hive-exec 1.2.1

2.创建自定义函数类
 自定义 UDF 函数,创建的类需继承 GenericUDF类,重写方法(org.apache.hadoop.hive.ql.udf.generic.GenericUDF)

3.在 hive 的命令行窗口创建函数

创建函数分为:创建临时函数、创建永久函数 两种。

创建函数命令如下:
create [temporary] function [dbname.]function_name AS class_name;

删除函数命令如下:
drop [temporary] function [if exists] [dbname.]function_name;

创建临时函数

1.将 maven 工程打包后的 jar,添加到 linux 服务器某个目录下
2.使用命令添加 jar,命令为:add jar 目录(jar所在linux目录)
3.创建function,命令:create temporary function 函数名 as 类路径(jar包中自定义函数的类路径)
4.通过命令:show functions可查看自己创建的函数。
5.提示:临时函数,在hive客户端关闭后失效,对 hive 中的全部数据库有效

创建永久函数

1.将 maven 工程打包后的 jar,上传到 hdfs 某个目录下(目录可自定义)
2.创建function,命令:create function ‘库名.函数名’ as ‘类路径’ using jar ‘jar包所在hdfs目录’
3.通过命令:show functions可查看自己创建的函数 (如果函数名不是【库名.函数名】格式,show functions是看不到的)。
4.提示:永久函数,只对当前所在库生效,其他库均不生效,所以建议使用【库名.函数名】命名方式。函数不会因为客户端的关闭而失效。
5.在 test 库下创建函数,名称为 test.split,在test 库下可直接 split() 方式使用。如需在 default 库下使用,则可通过加 test 前缀使用。

1.4 例如:

有如下数据:

a,1000,5000,120
b,2200,150,200
c,2200,450,2200
d,1100,1500,320
e,2200,200,4200
f,2200,3500,620

3个字段分别表示: 用户id,基本工资,业绩提成,股权收益
需要查询出每个人的三类收益中最高的是哪一种收益。

hive中函数,满足不了本案例的需求。此时,我们可以考虑自己开发一个hive的函数(hive具备这个机制)

针对当前这个问题进行自定义函数进行解决问题:
自定义UDF函数

1.4.1 创建一个 Maven 工程,导入 hive-exec jar 依赖
<dependencies>
    <dependency>
        <groupId>org.apache.hive</groupId>
        <artifactId>hive-exec</artifactId>
        <version>1.2.1</version>

        <exclusions>
            <exclusion>
                <groupId>org.pentaho</groupId>
                <artifactId>pentaho-aggdesigner-algorithm</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

</dependencies>

注意:Could not find artifact org.pentaho:pentaho-aggdesigner-algorithm:pom:5.1.5-jhyde in nexus-aliyun
这个的错误就要加入 排斥
“exclusion标签 这个标签的作用是排除关联依赖的引入,因为maven的pom依赖其中有一点是将关联的依赖全都引入进来 , 这个标签在这的作用就是 如果关联的依赖和引入的其他依赖可能存在冲突, 就必须将关联的依赖排除掉,所以就用这个标签。”

在这里插入图片描述

1.4.2 创建一个项目hive的项目:

在这里插入图片描述

1.4.3 打包,上传至linux

一般直接上传到root目录然后直接添加上去:
在这里插入图片描述
在这里插入图片描述
然后直接添加:
给hive中添加进来
add jar /root/XXX.jar
add jar /root/hivehfc.jar

1.4.3创建一个临时的函数TEMPORARY

create temporary function get_max as ‘com.hive.HiveCustom’;
不能有空格;
在这里插入图片描述
show functions;用来进行展示函数;

在这里插入图片描述
但是这个函数是临时函数;当关闭hive的时候就没有了;
在这里插入图片描述
测试:
select get_max(23,45,100);

在这里插入图片描述
select get_max(123,34,10);
select get_max(12,34,10);

在这里插入图片描述

这个就是自己弄的函数;

1.4.4 根据需求解决问题;

1.把要进行标号的数据进行导入;
在这里插入图片描述

2.创建表: 基本工资,业绩提成,股权收益
create table t_custom(id string,jiben int,yeji int,guquan int)
row format delimited fields terminated by ‘,’;
在这里插入图片描述
3.导入数据
load data local inpath ‘/root/custom.txt’ into table t_custom;

在这里插入图片描述
在这里插入图片描述
4.用刚定义的函数来进行操作:就是根据最大的标号;

select id,jiben,yeji,guquan,get_max(jiben,yeji,guquan) from t_custom;

在这里插入图片描述
5.根据需求进行测试数据:
select a.id,a.jiben,a.yeji,a.guquan,
case
when a.number=1 then ‘基本工资’
when a.number=2 then ‘业绩提成’
else ‘股权收益’
end
from
(select id,jiben,yeji,guquan,
get_max(jiben,yeji,guquan) as number
from t_custom)a;
在这里插入图片描述
另一种写法:
select id,jiben,yeji,guquan,
case
when get_max (jiben,yeji,guquan) =1 then ‘基本工资’
when get_max (jiben,yeji,guquan) =2 then ‘业绩提成’
when get_max (jiben,yeji,guquan) =3 then ‘股权收益’
end
from t_custom;
在这里插入图片描述

注:临时函数只在一次hive客户端会话中有效,重启会话后就无效

如果需要经常使用该自定义函数,可以考虑创建永久函数:

1.4.5 创建永久函数

1.在原先的基础上通过java来编写程序完成jar包的操作;
2.拷贝jar包到hive的类路径中:
cp hivehfc.jar /usr/local/hive/apache-hive-1.2.2-bin/lib/
在这里插入图片描述
3.创建永久函数;
create function getmaxdefault as ‘com.hive.HiveCustom’;
在这里插入图片描述
create function default.getmax as ‘com.hive.HiveCustom’;
在这里插入图片描述
关闭客户端之后还是可以使用;
在这里插入图片描述

1.4.6 删除函数(临时函数和永久函数)

DROP TEMPORARY FUNCTION function_name (函数名字)
DROP FUNCTION 库的名字. function_name (函数名字)

### 回答1: Apache Hive是一个开源的数据仓库基础设施,可以通过使用SQL来查询和分析大规模的数据集。apache-hive-2.1.1-bin.tar.gz是Hive的2.1.1版本的二进制安装包。这个安装包包含了Hive运行所需的所有文件。 在安装Hive之前,我们需要确保已经安装了Java Development Kit (JDK),因为Hive是在Java环境下运行的。然后,我们可以通过以下步骤来安装apache-hive-2.1.1-bin.tar.gz: 1. 首先,我们需要下载apache-hive-2.1.1-bin.tar.gz文件。我们可以从Apache Hive官方网站下载这个文件。 2. 下载完成后,我们需要将下载的文件解压缩。可以使用以下命令进行解压缩:tar -zxvf apache-hive-2.1.1-bin.tar.gz 3. 解压缩完成后,我们需要配置Hive的环境变量。我们可以打开.bashrc或.bash_profile文件,并添加以下配置行: export HIVE_HOME=/path/to/hive export PATH=$PATH:$HIVE_HOME/bin 请将上述配置行中的"/path/to/hive"替换为您解压缩Hive的路径。 4. 保存文件,然后加载这些配置。我们可以使用以下命令加载.bashrc文件:source ~/.bashrc 5. 现在,我们可以启动Hive了。使用以下命令启动:hive 这将启动Hive的命令行界面,我们可以在其中执行Hive的SQL查询和操作。 这就是安装apache-hive-2.1.1-bin.tar.gz的基本步骤。安装完成后,您可以开始使用Hive来查询和分析大规模的数据集。希望这个回答能对您有帮助! ### 回答2: Apache Hive是一个基于Hadoop的数据仓库解决方案,它可以提供结构化查询语言(SQL),以便从大规模分布式数据集中检索和分析数据。hive-2.1.1-bin.tar.gz是Hive的一个版本,其中的bin表示该文件包含了Hive的可执行脚本和二进制文件。 在解压和安装这个tar.gz文件之后,我们可以通过运行Hive的命令行界面来开始使用HiveHive提供了类似于SQL的查询语言,称为HiveQL,它允许用户使用SQL语句来查询和分析存储在Hadoop集群上的数据。 Hive可以处理各种类型的数据,包括结构化数据、半结构化数据和非结构化数据。它允许用户定义表结构,将数据导入表中,并执行类SQL查询来处理这些表。Hive使用Hadoop的MapReduce框架来执行查询,因此具有良好的可扩展性和容错性。 除了基本的查询功能外,Hive还支持用户自定义函数(UDFs),以便根据特定需求编写自定义的函数,并将其应用于查询中。此外,Hive还支持分区和分桶的概念,以改进查询性能。 通过使用Hive,用户可以利用Hadoop集群的强大计算能力和存储能力来处理大规模数据集。它提供了一种简化和抽象化的方式来处理和查询大数据,对于那些熟悉SQL语法的用户来说,学习和使用Hive相对容易。 总之,apache-hive-2.1.1-bin.tar.gz是Apache Hive的一个版本,它提供了一个基于Hadoop的数据仓库解决方案,可以通过HiveQL语言来查询和分析大规模分布式数据集。 ### 回答3: apache-hive-2.1.1-bin.tar.gz 是Apache Hive项目的二进制压缩文件。Apache Hive是一个基于Hadoop的数据仓库基础架构工具,用于提供数据的存储、查询和分析。通过Hive,用户可以使用类SQL语言在Hadoop集群中执行数据查询,并将查询结果转换为MapReduce任务进行处理。 Apache Hive提供了一个类似于关系型数据库的查询语言,称为HiveQL,它使用了SQL语法来查询和操作存储在Hadoop HDFS或Hive表中的数据。HiveHiveQL查询转换为MapReduce任务或Tez DAG(有向无环图)任务,让用户可以轻松地利用Hadoop集群的并行处理能力进行大规模数据处理。 通过Apache Hive,用户可以在不需要掌握复杂的MapReduce编程技术的情况下,利用简单的SQL语法进行数据分析和挖掘。用户可以创建Hive表,将数据加载到表中,并使用HiveQL进行查询和处理。此外,Hive还提供了用户定义函数(UDF)、用户定义聚合函数(UDAF)和用户定义转换函数(UDTF)的能力,让用户可以按照自己的需求扩展和定制Hive的功能。 apache-hive-2.1.1-bin.tar.gz是Hive 2.1.1版本的二进制分发文件。用户可以下载并解压此文件,即可在本地环境中部署和运行Apache HiveHive还有其他版本和分发文件可供选择,用户可以根据自己的需求选择适合的版本进行使用。对于想要在Hadoop集群中快速搭建和使用数据仓库工具的用户,Apache Hive提供了一个强大而灵活的解决方案。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值