[HADOOP] 덮어 쓰기 디렉토리 삽입에 대한 Hive 사례 설명
HADOOP덮어 쓰기 디렉토리 삽입에 대한 Hive 사례 설명
다음 논리를 사용하여 HQL 스크립트를 실행하려고하면 오류가 발생합니다.
ParseException line 4:0 cannot recognize input near 'CASE' 'WHEN' 'mytable' in serde properties specification
스크립트 로직
INSERT OVERWRITE DIRECTORY '/example/path'
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
CASE WHEN ${hiveconf:tbl_name}='mytable'
THEN SELECT * FROM ${hiveconf:tbl_name} LEFT OUTER JOIN ...;
WHEN ${hiveconf:tbl_name}='mytable2'
THEN SELECT * FROM ${hiveconf:tbl_name} LEFT OUTER JOIN ...;
ELSE THEN
END
INSERT OVERWRITE DIRECTORY에 전달할 tbl_name 매개 변수의 값을 기반으로 select 문을 올바르게 지정하려면 어떻게해야합니까?
업데이트 1 : 다음과 같이 수정하는 경우 :
SELECT CASE WHEN ${hiveconf:tbl_name}='mytable'
THEN * FROM WHEN ${hiveconf:tbl_name}='mytable'
WHEN ${hiveconf:tbl_name}='mytable2'
THEN * FROM ${hiveconf:tbl_name} LEFT OUTER JOIN ...;
ELSE THEN
END
다음과 같은 오류가 발생합니다.
FAILED: ParseException line 9:9 cannot recognize input near '*' 'FROM' 'mytable' in expression specification
업데이트 2 : 다음과 같이 수정하는 경우 :
SELECT * CASE WHEN ${hiveconf:tbl_name}='mytable'
THEN FROM WHEN ${hiveconf:tbl_name}='mytable'
WHEN ${hiveconf:tbl_name}='mytable2'
THEN FROM ${hiveconf:tbl_name} LEFT OUTER JOIN ...;
ELSE THEN
END
다음과 같은 오류가 발생합니다.
FAILED: ParseException line 8:9 Failed to recognize predicate 'CASE'. Failed rule: 'regularBody' in statement
해결법
-
==============================
1.빠른 해결책은 UNION ALL + WHERE를 사용하는 것입니다. 이처럼 :
빠른 해결책은 UNION ALL + WHERE를 사용하는 것입니다. 이처럼 :
insert overwrite directory ... select * from mytable where '${hiveconf:tbl_name}'='mytable' union all select * from mytable2 where '${hiveconf:tbl_name}'='mytable2'
각 선택에 조인을 추가하십시오.
from https://stackoverflow.com/questions/37595532/hive-case-statement-for-insert-overwrite-directory by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Cloudera Impala가 Tableau 오류에 연결 (0) | 2019.09.07 |
---|---|
[HADOOP] 일식에서 hadoop 디버깅 (0) | 2019.09.07 |
[HADOOP] 스파크에서 하이브 파티션 테이블에 데이터 프레임 저장 (0) | 2019.09.07 |
[HADOOP] Elephantbird 등록이 여전히 오류 2998을 표시 함 (0) | 2019.09.07 |
[HADOOP] AWS Elastic mapreduce가 스트리밍을 jar로 올바르게 변환하지 않는 것 같습니다 (0) | 2019.09.07 |