복붙노트

[HADOOP] 하이브 udf에서 하이브 conf 변수를 전달하는 방법은 무엇입니까?

HADOOP

하이브 udf에서 하이브 conf 변수를 전달하는 방법은 무엇입니까?

하이브 구성 변수를 하이브 UDF에 전달하려고합니다.

아래는 코드 스 니펫입니다.

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

아래는 하이브 UDF 호출입니다.

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

udf에서 나는 testArg의 값을 null로 얻는다.

udf에서 하이브 conf 변수를 사용하는 방법과 하이브 UDF에서 하이브 구성에 액세스하는 방법을 알려주십시오.

해결법

  1. ==============================

    1.나는 아래 명령을 사용하여 하이브 변수를 'hiveconf'로 전달해야한다고 생각한다.

    나는 아래 명령을 사용하여 하이브 변수를 'hiveconf'로 전달해야한다고 생각한다.

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

    그런 다음 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("testArg");
            System.out.println("sysout.myconf:"+ myconf);
        }
    }
    

    이 코드는 하이브 1.2에서 테스트되었습니다.

  2. ==============================

    2.뷰 생성 중에 Hive가 변수의 값을 정확하게 취하므로 뷰가 정적이 될 수 있으므로 뷰 코드에서 $ {hiveconf : testArg}를 사용하여 뷰에 하이브 변수를 직접 전달할 수 없습니다.

    뷰 생성 중에 Hive가 변수의 값을 정확하게 취하므로 뷰가 정적이 될 수 있으므로 뷰 코드에서 $ {hiveconf : testArg}를 사용하여 뷰에 하이브 변수를 직접 전달할 수 없습니다.

    유일한 기회는 UDF를 사용하여 하이브 변수에 액세스하는 것입니다.

    GenericUDF를 사용할 수 있습니다. MapRequest에는, MapReadContext를 파라미터로서 취하는 메소드가 있습니다. 따라서 다음과 같이 GenericUDF에서 configure 메소드를 지정해야합니다.

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

    이것은 MapRedTask의 런타임에만 호출됩니다.

  3. from https://stackoverflow.com/questions/23995290/how-to-pass-hive-conf-variable-in-hive-udf by cc-by-sa and MIT license