복붙노트

[HADOOP] 하이브에서 UDF 결과를 검색

HADOOP

하이브에서 UDF 결과를 검색

다음 HiveQL 코드에서, 나는 기존 테이블에 파티션을 추가 할 :

-- my_table was defined and partitioned by `dt string`, which is date
-- now I want to add partition
alter table my_table add if not exists
partition (dt=current_date());   #FAILED: ParseException line 1:72 extraneous input '(' expecting ) near '<EOF>'

alter table my_table add if not exists
partition (dt=${current_date()});   # FAILED: ParseException line 1:60 cannot recognize input near '$' '{' 'current_date' in constant

그러나, 위의 코드가 작동하지 않습니다, 왜? 다른 방법은 그것을 할까?

해결법

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

    1.하이브는 ALTER 파티션에 리터럴을 기대

    하이브는 ALTER 파티션에 리터럴을 기대

    NoViableAltException(26@[215:1: constant : ( Number | dateLiteral | timestampLiteral | StringLiteral | stringLiteralSequence | BigintLiteral | SmallintLiteral | TinyintLiteral | DecimalLiteral | charSetStringLiteral | booleanValue );])
    

    또한, CURRENT_DATE 아마 더 낮은 버전으로 작업하는, 그래서 당신의 오류에 기반을 둔 하이브 2.0에서만 사용할 수 있습니다.

    해결 방법.

    다음 문을 사용하여 파일을 쓰기

    ALTER TABLE my_table add if not exists partition(dt= '${hiveconf:mytime}')
    

    및 (리눅스에서) 같은 하이브를 호출

    mydate=$(date +"%m-%d-%y")
    hive -S -hiveconf mytime=$mydate-f test.hql
    

    나는 도움을 바랍니다.

    PS : 나는 어쨌든 당신이 (대신 CURRENT_DATE의 CURRENT_DATE처럼 사용한다, 하이브 2.0 CURRENT_DATE로 바꾼다 명령을 시도하고 싶습니다)

  2. from https://stackoverflow.com/questions/41825726/retrieve-udf-results-in-hive by cc-by-sa and MIT license