欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

HiveTEMPORARYFUNCTIONANDPERSISTENTFUNCTION

时间:2023-07-16
TEMPORARY FUNCTION(临时函数)

TEMPORARY FUNCTION 的作用域仅在当前会话中,重新进入 hive,或者重新连接 HiveServer2,需要重新创建。

ADD JAR pathOfJar; --路径可以是 hdfs 或者 本地文件DROp FUNCTION IF EXISTS functionName;CREATE TEMPORARY FUNCTION functionName AS 'com.xxx.xxx.ClassName';

使用方法

select functionName(parameters) from table_name.

PERSISTENT FUNCTION(持久函数)

持久函数的作用域是全局的,在一个会话创建的持久函数,在其他会话可以看到。持久函数的信息存储在 metaStore后端数据库里,所以重启 Hive 环境,重启 HiveServer 或者重启 metaStore 都不影响持久函数的使用。
持久函数属于一个数据库,不同的数据库可以有相同名称的持久函数。

利用 hive 已有的 class 做示例,用户可以上传自己的 jar 包。

hadoop fs -mkdir -p hdfs://localhost:9000/apps/hive/hadoop fs -put /usr/local/hive/lib/hive-exec-3.1.2.jar hdfs://localhost:9000/apps/hive/

创建持久函数

create function tpcds_hdfs_orc_3.length_u as 'org.apache.hadoop.hive.ql.udf.generic.GenericUDFLength' using jar 'hdfs://localhost:9000/apps/hive/hive-exec-3.1.2.jar';

使用持久函数

如果在持久函数所在的数据库,直接使用。

select length_u(web_name) from web_site;

如果不在持久函数所在的数据库,持久函数前面需要加上数据库前缀。

select tpcds_hdfs_orc_3.length_u(web_name) from web_site;

持久函数在 metaStore 数据库中存储信息

持久函数的基本信息存储在 FUNCS 表中。

mysql> select * from metastore.FUNCS;+---------+--------------------------------------------------------+-------------+-------+------------------+-----------+------------+------------+| FUNC_ID | CLASS_NAME | CREATE_TIME | DB_ID | FUNC_NAME | FUNC_TYPE | OWNER_NAME | OWNER_TYPE |+---------+--------------------------------------------------------+-------------+-------+------------------+-----------+------------+------------+| 1 | org.apache.hadoop.hive.ql.udf.generic.GenericUDFLength | 1644303366 | 5 | genericudflength | 1 | NULL | USER |+---------+--------------------------------------------------------+-------------+-------+------------------+-----------+------------+------------+1 row in set (0.00 sec)

持久函数的 Jar 包位置信息存储在 FUNC_RU 表中。

mysql> select * from metastore.FUNC_RU;+---------+---------------+-----------------------------------------------------+-------------+| FUNC_ID | RESOURCE_TYPE | RESOURCE_URI | INTEGER_IDX |+---------+---------------+-----------------------------------------------------+-------------+| 1 | 1 | hdfs://localhost:9000/apps/hive/hive-exec-3.1.2.jar | 0 |+---------+---------------+-----------------------------------------------------+-------------+1 row in set (0.00 sec)

RESOURCE_TYPE 对应 ResourceType 枚举的值。

public enum ResourceType implements org.apache.thrift.TEnum { JAR(1), FILE(2), ARCHIVE(3); private final int value; private ResourceType(int value) { this.value = value; }}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。