如何在hive udf中传递Hive conf变量?

时间:2014-06-02 13:07:04

标签: hadoop hive bigdata

我想将hive conf变量传递给hive UDF。

下面的

是一个代码段。

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

以下是hive UDF调用。

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

在udf中,我将testArg的值变为null。

请告诉我如何在udf中使用hive conf变量以及如何在hive UDF中访问Hive配置?

2 个答案:

答案 0 :(得分:2)

我认为您应该使用以下命令将hive变量作为“ 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);
    }
}

该代码已在配置单元1.2上进行了测试

答案 1 :(得分:-1)

您无法通过在视图代码中使用$ {hiveconf:testArg}将Hive变量直接传递给视图,因为在视图创建期间,Hive将获取该变量的确切值,因此视图将是静态的。

唯一的机会是使用UDF访问hive变量:

您可以使用GenericUDF。它有一个方法configure,它将MapredContext作为参数。因此,您需要在GenericUDF中指定configure方法,例如:

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

这只在MapRedTask的运行时调用。