如何在java的udf中获取hive变量的值?

tv6aics1  于 2021-06-26  发布在  Hive
关注(0)|答案(1)|浏览(506)

是否可以获取会话中设置的配置单元变量的值,如下所示:

> set temp_var=abc;

在自定义自定义自定义项中,我将在同一会话中提前调用它。我不想将变量作为参数传递给udf。我在寻找一种从java中按语法实现的方法。

kninwzqo

kninwzqo1#

是的,这是可能的。
假设您已通过将以下变量设置到会话中 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 方法如下: MapReduce 可能由hive启动的程序。

@Override
    public void configure(MapredContext context) {
        super.configure(context);
        JobConf conf = context.getJobConf();
            if (conf != null) {
              String myhiveConf = conf.get("temp_var");
            }
        }
    }

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

相关问题