복붙노트

[HADOOP] 하위 쿼리를 작성하고 하이브에서 "In"절을 사용하는 방법

HADOOP

하위 쿼리를 작성하고 하이브에서 "In"절을 사용하는 방법

Hive에서 In 절을 어떻게 사용할 수 있습니까? 나는 Hive에 이런 것을 쓰고 싶다.   x에서 y를 선택하십시오. 여기서 y.z는 (x와 y를 구분하여 선택하십시오) x로 정렬합니다. 그러나 나는 그것을하는 어떤 방법도 발견하지 못하고있다. 하이브 0.7에서 In 절을 시도했는데 오류가 발생했습니다. 또한 Find_in_Set을 시도했습니다. find_in_set (y.z, subquery) .. 사용하지만 작업이 실패합니다.

하이브에서하고 싶습니다. 아무도 하이브에서 어떻게하는지 안다면 저를 도우십시오.

감사 & 감사합니다, 아툴

해결법

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

    1.https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select에 따라 :

    https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select에 따라 :

    "Hive는 WHERE 절에서 IN, EXISTS 또는 하위 쿼리를 지원하지 않습니다."

    다음과 같이 보길 원할 수 있습니다. https://issues.apache.org/jira/browse/HIVE-801

    https://issues.apache.org/jira/browse/HIVE-1799

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

    2.세미 조인 (https://cwiki.apache.org/Hive/languagemanual-joins.html)을 사용할 수 있습니다.

    세미 조인 (https://cwiki.apache.org/Hive/languagemanual-joins.html)을 사용할 수 있습니다.

    LEFT SEMI JOIN은 효율적인 IN / EXISTS 부질의 의미론을 구현합니다. Hive는 현재 IN / EXISTS 하위 쿼리를 지원하지 않으므로 LEFT SEMI JOIN을 사용하여 쿼리를 다시 작성할 수 있습니다. LEFT SEMI JOIN을 사용하는 제한 사항은 오른쪽 조건부 테이블이 조인 조건 (ON 절)에서만 참조되어야하지만 WHERE 절이나 SELECT 절 등에서 참조되지 않아야한다는 것입니다.

    SELECT a.key, a.value
      FROM a
      WHERE a.key in
       (SELECT b.key
        FROM B);
    

    다시 쓸 수 있습니다 :

       SELECT a.key, a.val
       FROM a LEFT SEMI JOIN b on (a.key = b.key)
    
  3. ==============================

    3.Hive 0.13은 이제 WHERE 절의 IN / EXISTS를 지원합니다 .. https://issues.apache.org/jira/browse/HIVE-784 문제는 4 년 후에 해결되었습니다 :)

    Hive 0.13은 이제 WHERE 절의 IN / EXISTS를 지원합니다 .. https://issues.apache.org/jira/browse/HIVE-784 문제는 4 년 후에 해결되었습니다 :)

  4. ==============================

    4.하이브 버전 0.7.1 및 SELECT *에서 MYTABLE WHERE MYCOLUMN IN ( 'thisThing', 'thatThing');을 사용하고 있습니다.

    하이브 버전 0.7.1 및 SELECT *에서 MYTABLE WHERE MYCOLUMN IN ( 'thisThing', 'thatThing');을 사용하고 있습니다.

    위에 언급 한 Wawrzyniec처럼 Hive 언어 매뉴얼은 그것이 지원되지 않고 LEI SEMI JOIN을 사용한다고 말했기 때문에 이것이 모든 데이터 타입에 대해 보편적으로 작동하는지 확신 할 수 없지만 컬럼 타입 STRING에서 이것을 테스트했지만 괜찮 았습니다. 내 검사에서.

  5. ==============================

    5.Hive는 IN을 완벽하게 지원합니다 ... WHERE 절의 하위 쿼리를 지원하지 않습니다.

    Hive는 IN을 완벽하게 지원합니다 ... WHERE 절의 하위 쿼리를 지원하지 않습니다.

    4 년 이래로 페이스 북 엔지니어들의 공개 기능 티켓이 있습니다 ... https://issues.apache.org/jira/browse/HIVE-784?focusedCommentId=13579059

  6. ==============================

    6.테이블 t1 (id, name) 및 테이블 t2 (id, name)

    테이블 t1 (id, name) 및 테이블 t2 (id, name)

    t2 (기본적으로 IN 절)에있는 t1의 ID 만 나열합니다.

    hive>select a.id from t1 a left semi join t2 b on (a.id=b.id);
    

    t1에만 존재하지만 t2에는 존재하지 않는 t1의 ID만을 나열합니다 (기본적으로 NOT IN 절)

    hive>select a.id from t1 a left outer join t2 b on(a.id=b.id) where b.id is null;
    
  7. ==============================

    7.Hive는 제한이 거의없는 Hive 0.13 이후 IN / EXISTS 문을 지원합니다. 자세한 내용은 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SubQueries를 참조하십시오.

    Hive는 제한이 거의없는 Hive 0.13 이후 IN / EXISTS 문을 지원합니다. 자세한 내용은 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SubQueries를 참조하십시오.

  8. from https://stackoverflow.com/questions/7677333/how-to-write-subquery-and-use-in-clause-in-hive by cc-by-sa and MIT license