2015-01-09 3 views
0

하이브에서 NOT IN 쿼리를 사용해야합니다.하이브 - 세미 조인 사용시 NOT 존재 사용

는 I 3 표 A, B 및 C

필드 PRODUCT, ID과 값

B있다. 필드 ID 및 VALUE가있는 C I는 언급

난 테이블 A.

INSERT OVERWRITE TABLE A a SELECT * FROM B b LEFT SEMI JOIN C c ON (b.ID = c.ID AND b.VALUE = c.VALUE) where b.ID = NULL AND b.VALUE = NULL;

http://stackoverflow.com/questions/25041026/hive-left-semi-join-for-not-exists에서이 제안 작동하지

을 표 C에 일치하는 ID와 VALUE 필드가없는 테이블 B로부터의 열을 작성해야 WHERE 절의 오른쪽 테이블. 수행하지 않아야합니다.

WHERE 절의 오른쪽 테이블을 참조하지 않고 동일한 쿼리를 구성하는 방법.

다른 해결책이 있습니까?

답변

0

해결 방법 : 목표 테이블은 두 테이블의 모든 필드가

확인합니다. 왜냐하면, 여기에 * 사용했기 때문입니다. 이어서

, 그것은 b.VALUE 되어야한다 NUL L 및하지 NULL = 된다. ,

INSERT OVERWRITE TABLE A a 
SELECT * FROM B b 
LEFT SEMI JOIN C c 
ON (b.ID = c.ID AND b.VALUE = c.VALUE) where 
b.ID IS NULL AND b.VALUE IS NULL; 
0

하이브가 NOT IN, 인디애나 지원 보인다 존재하지 0.13

Select A.Id,A.* 
From A 
Where EXISTS (Select 1 From B where A.ID = B.ID) 

에서 존재의 하위 쿼리를 EXISTS 및 상관 관계가 있어야 존재합니다 :

쿼리는 다음과 같이해야한다 술어 (위의 샘플에서 b.ID = a.ID와 동일) 자세한 내용은 Hive Wiki > Subqueries in the WHERE Clause

을 참조하십시오.