[HADOOP] 왜 하이브는 선택 부분에 명명 된 별명을 인식 할 수 없습니까?
HADOOP왜 하이브는 선택 부분에 명명 된 별명을 인식 할 수 없습니까?
시나리오는 다음과 같습니다. hql을 다음과 같이 호출하면 u1에 대한 별칭을 찾을 수 없다는 메시지가 나타납니다.
hive> select user as u1, url as u2 from rank_test where u1 != "";
FAILED: SemanticException [Error 10004]: Line 1:50 Invalid table alias or column reference 'u1': (possible column names are: user, url)
이 문제는 count (*)를 cnt로 사용할 때와 같습니다. 누구든지 where 절에서 별칭을 사용하는 방법에 대한 힌트를 줄 수 있습니까? 고마워요!
hive> select user, count(*) as cnt from rank_test where cnt >= 2 group by user;
FAILED: ParseException line 1:58 missing EOF at 'where' near 'user'
해결법
-
==============================
1.where 절은 select 절 이전에 평가되므로 where 절에서 선택 별칭을 참조 할 수 없습니다.
where 절은 select 절 이전에 평가되므로 where 절에서 선택 별칭을 참조 할 수 없습니다.
그러나 파생 테이블에서 별칭을 참조 할 수 있습니다.
select * from ( select user as u1, url as u2 from rank_test ) t1 where u1 <> ""; select * from ( select user, count(*) as cnt from rank_test group by user ) t1 where cnt >= 2;
참고 : 마지막 쿼리를 작성하는보다 효율적인 방법은
select user, count(*) as cnt from rank_test group by user having count(*) >= 2
올바르게 기억하면 별칭을 참조 할 수 있습니다. 즉, cnt> = 2
-
==============================
2.내 하이브 선택 문에서 백틱 기호``를 사용하여 별칭을 사용할 수있었습니다.
내 하이브 선택 문에서 백틱 기호``를 사용하여 별칭을 사용할 수있었습니다.
SELECT COL_01 AS `Column_A`;
위의 솔루션은 Hive 버전 1.2.1에서 작동했습니다.
참조 링크
from https://stackoverflow.com/questions/26028767/why-cant-hive-recognize-alias-named-in-select-part by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] namenode를 포맷하려고 할 때 주 클래스를 찾거나로드 할 수 없습니다. MAC OS X 10.9.2에 설치된 hadoop (0) | 2019.06.08 |
---|---|
[HADOOP] Hive 2.1.1 MetaException (메시지 : 버전 정보가 메타 스토어에 없습니다.) (0) | 2019.06.08 |
[HADOOP] 하이브는에서 지원하지 않습니다. 다음 쿼리는 어떻게 작성합니까? (0) | 2019.06.08 |
[HADOOP] Hadoop MapReduce를 사용하여 정렬 된 단어 수 (0) | 2019.06.08 |
[HADOOP] Hadoop : "start-all.sh"를 입력 한 후 루트 암호가 필요합니다. (0) | 2019.06.07 |