如何在hiveudf中传递hiveconf变量?

6yoyoihd  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(480)

我想把hive conf变量传递给hive udf。
下面是一个代码片段。

hive -f ../hive/testHive.sql -hivevar testArg=${testArg}

下面是配置单元自定义项调用。

select setUserDefinedValueForColumn(columnName,'${testArg}') from testTable;

在udf中,我得到testarg的值为null。
请告诉我如何在自定义项中使用配置单元配置变量,以及如何在配置单元自定义项中访问配置单元配置?

alen0pnh

alen0pnh1#

不能使用将配置单元变量直接传递给视图${hiveconf:testarg}在视图代码中,因为在视图创建过程中,配置单元将精确获取变量的值,因此视图将是静态的。
唯一的机会是使用udf访问配置单元变量:
您可以使用genericudf。它有一个方法configure,该方法将mapredcontext作为参数。因此,需要在genericudf中指定configure方法,如:

public void configure(MapredContext context){
 yourVar = context.getJobConf().get("hive_variable");
}

这只在mapredtask的运行时调用。

gv8xihay

gv8xihay2#

我认为应该使用以下命令将配置单元变量传递为“hiveconf”:

hive --hiveconf testArg="my test args" -f ../hive/testHive.sql

那么在一个 GenericUDF evaluate() 方法:

@Override
 public Object evaluate(DeferredObject[] args) throws HiveException {
    String myconf;
    SessionState ss = SessionState.get();
    if (ss != null) {
        HiveConf conf = ss.getConf();
        myconf= conf.get("testArg");
        System.out.println("sysout.myconf:"+ myconf);
    }
}

代码在hive1.2上进行了测试

相关问题