是否有可能获得会话中设置的hive变量的值,如下所示:
> set temp_var=abc;
在Custom UDF中,我将在同一个会话中提前调用。 我不想将变量作为参数传递给UDF。我正在寻找一种方法来从java中进行语法编写。
答案 0 :(得分:0)
是的,有可能。
假设您通过set
命令或在脚本中将以下变量设置为会话。
set temp_var=abc;
您可以使用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("temp_var");
System.out.println("sysout.myconf:"+ myconf);
}
}
我还建议覆盖以下configure
方法,以支持可能由Hive启动的MapReduce
程序。
@Override
public void configure(MapredContext context) {
super.configure(context);
JobConf conf = context.getJobConf();
if (conf != null) {
String myhiveConf = conf.get("temp_var");
}
}
}
该代码已在配置单元1.2上进行了测试