栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

Hive TEMPORARY FUNCTION AND PERSISTENT FUNCTION(临时函数和持久函数)

Hive TEMPORARY FUNCTION AND PERSISTENT FUNCTION(临时函数和持久函数)

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;
  }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/730379.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号