如何在蜂巢中添加永久功能?

Jud*_*ing 3 hive user-defined-functions

这是问题所在:如果我temporary function在这样的hive中声明一个:

add jar /home/taobao/oplog/hivescript/my_udf.jar;
create temporary function getContentValue as 'com.my.udf.GetContentValue';
Run Code Online (Sandbox Code Playgroud)

它将getContentValue 在此hive会话中正常工作.但我想要的是不必每次开始蜂巢会话时都添加jar以及创建临时函数.也就是说,使功能永久化.

这个问题有什么解决方案吗?

Mou*_*tta 6

从0.13.0(HIVE-6047)开始,您可以通过以下方式使UDF永久化:

CREATE FUNCTION [db_name.]function_name AS class_name [USING JAR|FILE|ARCHIVE 'file_uri' [, JAR|FILE|ARCHIVE 'file_uri'] ]
Run Code Online (Sandbox Code Playgroud)

UDF的一个示例:

CREATE FUNCTION getContentValue AS 'com.my.udf.GetContentValue' USING JAR '/home/taobao/oplog/hivescript/my_udf.jar';
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请查看Hive数据定义语言,引用它:

此语句允许您创建由class_name实现的函数.可以使用USING子句指定需要添加到环境中的jar,文件或存档; 当Hive会话第一次引用该函数时,这些资源将被添加到环境中,就像发布了ADD JAR/FILE一样.如果Hive不在本地模式,则资源位置必须是非本地URI,例如HDFS位置.

该函数将添加到指定的数据库,或者在创建函数时添加到当前数据库.可以通过完全限定函数名称(db_name.funciton_name)来引用该函数,或者如果函数位于当前数据库中,则可以无限制地引用该函数.