配置单元:创建函数(如果不存在)

时间:2018-08-08 09:38:39

标签: hadoop hive hiveql

在我的蜂巢脚本开始时,我有一条语句:

create function x as y using jar z;

现在,如果该功能已经存在,它将给我一个错误:

Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.FunctionTask. AlreadyExistsException(message:Function x already exists)

如果我使用create function if not exists x as y using jar z;,我会收到此错误:

Error while compiling statement: FAILED: ParseException line 7:192 cannot recognize input near 'if' 'not' 'exists' in function identifier

语句create function if not exists在Impala中可以使用,但是似乎蜂巢不支持它。这是在Hive中做类似事情的方式吗?

2 个答案:

答案 0 :(得分:1)

我在配置单元中使用以下语句来创建临时功能。

ADD JAR hdfs:///tmp/udfs/jar1.jar;
DROP  FUNCTION IF EXISTS rowid;
CREATE TEMPORARY FUNCTION rowid AS 'com.example.hive.jartest.RowIdUDF';

答案 1 :(得分:0)

为确保即使函数已经存在,我的hql始终运行,我选择:

set hive.exec.drop.ignorenonexistent = true;

drop function concat_i_t;

CREATE FUNCTION x
AS 'y'
USING JAR 'hdfs:///z';

但是,我想了解一个更优雅的解决方案