복붙노트

[HADOOP] NOT IN 절을 실행하는 하이브 명령

HADOOP

NOT IN 절을 실행하는 하이브 명령

두 개의 테이블, tab1 & tab2 있습니다.

tab1(T1)  tab2(T2)
a1         b1
b1         c1
c1         f1
d1         g1

T2에 존재하지 않는 테이블 T1의 값을 찾고 있습니다. 이 경우 출력은 a1 d1이어야합니다.

다음 쿼리를 시도했지만 올바른 솔루션을 얻을 수 없습니다.

select distinct tab1.T1 from tab1 left semi join tab2 on (tab1.T1!=tab2.T2);

해결법

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

    1.

    SELECT t1.str
    FROM tab1 t1 
    LEFT OUTER JOIN tab2 t2 ON t1.str = t2.str
    WHERE t2.str IS NULL;
    

    결과:

    OK
    a1
    d1
    

    "왜 t2.str은 null 조건입니다": 왼쪽 외부 조인은 첫 번째 테이블의 모든 값이 결과에 포함되도록합니다. 그러면 두 번째 테이블에 값이 없을 때 어떤 일이 발생합니까?이 경우 두 번째 테이블의 모든 열이 null로보고됩니다.

    따라서 위의 경우 두 번째 테이블 항목이 누락 된 상태를 정확하게 검색하고 있으므로 다음과 같이 처리합니다.

  2. from https://stackoverflow.com/questions/20880124/hive-command-to-execute-not-in-clause by cc-by-sa and MIT license