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

Posted

技术标签:

【中文标题】如何在 Java 的 UDF 中获取 hive 变量的值?【英文标题】:How to get the value of hive variable, in the UDF in Java? 【发布时间】:2017-09-05 12:58:58 【问题描述】:

是否可以像这样获取在会话中设置的配置单元变量的值:

> set temp_var=abc;

在我将在同一会话中提前调用的自定义 UDF 中。 我不想将变量作为参数传递给 UDF。我正在寻找一种在 java 中以编程方式执行此操作的方法。

【问题讨论】:

【参考方案1】:

是的,有可能。

假设您通过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");
            
        
    

代码在 hive 1.2 上测试

【讨论】:

以上是关于如何在 Java 的 UDF 中获取 hive 变量的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在Hive&Impala中使用UDF

0011-如何在Hive & Impala中使用UDF

如何在 Hive 中重新加载更新的自定义 UDF 函数?

处理 hive udf 中的多行

用java编写的hive udf、udaf、udtfs如何在eclipse之类的ide中调试?

Hive自定义UDF函数