我可以使用CREATE TEMPORARY FUNCTION创建一个UDF并为当前的配置单元会话配置它。有没有办法做到这一点,并为所有用户的所有未来会话提供此功能?
答案 0 :(得分:3)
要使用UDF,您需要两个步骤:
ADD JAR my_jar.jar
CREATE TEMPORARY FUNCTION from_unixtime AS 'org.apache.hadoop.hive.ql.udf.FromUnixTime';
因此,为了让UDF可供所有用户使用,您必须执行上述两个步骤。对于#1,您可以在hive-env.sh中执行类似export HIVE_AUX_JARS_PATH = <path to the folder>
的操作,这样可以使jar可用。
获取#2非常棘手,最好的方法是在Hive Metastore中支持UDF名称和类名之间的链接。但是,目前情况并非如此。所以,没有真正好的方法。
我建议使用.hiverc文件,该文件同时执行#1和#2。将它放在您的主目录或hive bin目录中(尽管补丁正在从hive conf目录中获取它)。唯一的问题是它只在用户通过CLI访问配置单元时才有效。如果您使用的是JDBC,则必须在Hive会话开始时手动获取该文件。
答案 1 :(得分:2)
你可以在以下位置找到.hiverc文件:$ HIVE_HOME / bin / .hiverc和$ HOME / .hiverc?如果找到一个然后打开文件,只需在那里添加CREATE TEMPORARY FUNCTION命令。然后,每次启动配置单元时,都会加载此.hiverc文件,因此您的UDF将被注册为所有HIVE会话。
Achyut
答案 2 :(得分:0)
扩展上述答案:为了真正使所有用户/会话都能使用UDF,需要:
来自Hive Bible(编程蜂巢):
Here is an example change to FunctionRegistry where the new nvl() function is added
to Hive’s list of built-in functions:
...
registerUDF("parse_url", UDFParseUrl.class, false);
答案 3 :(得分:0)
how to add a permanent function in hive?中的一个答案指出,由于Hive 13有一个CREATE FUNCTION功能可用于永久功能,如https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-PermanentFunctions所述。
答案 4 :(得分:0)
从hive .13开始,UDF可以存储在Metastore中,可以在查询中引用....
CREATE FUNCTION [db_name。] function_name AS class_name [使用JAR |文件|存档&#39; file_uri&#39; [,JAR | FILE | ARCHIVE&#39; file_uri&#39;]];
示例:
创建功能woy AS&#39; com.udf.hive.WOYUDF&#39;使用JAR&#39; hdfs:///user/root/udfhive-1.0-SNAPSHOT.jar' ;;