我想将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配置?
答案 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的运行时调用。