如何在Java中的UDF中获取hive变量的值?

时间:2017-09-05 12:58:58

标签: hive hiveql

是否有可能获得会话中设置的hive变量的值,如下所示:

> set temp_var=abc;

在Custom UDF中,我将在同一个会话中提前调用。 我不想将变量作为参数传递给UDF。我正在寻找一种方法来从java中进行语法编写。

1 个答案:

答案 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上进行了测试