복붙노트

[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. ==============================

    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. ==============================

    2.내 하이브 선택 문에서 백틱 기호``를 사용하여 별칭을 사용할 수있었습니다.

    내 하이브 선택 문에서 백틱 기호``를 사용하여 별칭을 사용할 수있었습니다.

    SELECT COL_01 AS `Column_A`;
    

    위의 솔루션은 Hive 버전 1.2.1에서 작동했습니다.

    참조 링크

  3. from https://stackoverflow.com/questions/26028767/why-cant-hive-recognize-alias-named-in-select-part by cc-by-sa and MIT license