Chetan Shirke
Chetan Shirke

Reputation: 904

How to pass Hive conf variable in hive udf?

I want to pass hive conf variable to hive UDF.

below is a code snippet.

hive -f ../hive/testHive.sql -hivevar testArg=${testArg}

Below is hive UDF call.

select setUserDefinedValueForColumn(columnName,'${testArg}') from testTable;

In udf I am getting value of testArg as null.

Please advice me how to use hive conf variable in udf and how to access Hive configuration in hive UDF?

Upvotes: 1

Views: 2240

Answers (2)

Gyanendra Dwivedi
Gyanendra Dwivedi

Reputation: 5538

I think that you should pass hive variable as 'hiveconf' using below command:

hive --hiveconf testArg="my test args" -f ../hive/testHive.sql

Then you may have below code inside a GenericUDF evaluate() method:

@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);
    }
}

The code is tested on hive 1.2

Upvotes: 2

Aleksejs R
Aleksejs R

Reputation: 517

You can't pass a Hive variable directly to the view by using ${hiveconf:testArg} in the view code because during the view creation Hive will take exactly value of the variable so the view will be static.

The only opportunity is to use UDF to access hive variable:

You can use GenericUDF. It has a method configure which takes MapredContext as a parameter. So, you need to specify a configure method in GenericUDF, like :

public void configure(MapredContext context){
 yourVar = context.getJobConf().get("hive_variable");
}

This is only called in runtime of MapRedTask.

Upvotes: -1

Related Questions