본문 바로가기

코딩, 엑셀

Hive, 두 그룹에서 한쪽에만 속하는 관계를 조인으로


Hive에서 데이터를 조회할 때 A그룹과 B그룹을 임시테이블로 만들었을 때 A그룹에만 속하는 리스트를 추출하고 싶을 때는 아래와 같이 left outer join과 where 구문의 조합으로 풀 수 있다. 샘플 코드를 보자. 

 

select *
from 
(
select distinct key
from sample.reqlog
where date = '20191209'
) a 

left join 

(
select distinct key
from sample.reqlog
where date between '20191108' and '20191208'
) b

on a.key = b.key
where b.key is null

첫번째 쿼리로 2019년 12월 9일에 해당하는 key를 추출하고, 두번째 쿼리에서 이전 한달의 key를 추출한다. 이때 12월 9일에는 존재하지만 이전 한달동안에는 존재하지 않았던 key만을 구하고자 한다면, 이 두개의 임시테이블을 left outer join을 한다음에 b 임시테이블에 해당하는 key값이 null인 것만 찾으면 된다. 

 

보통 join을 할 때는 양쪽에 모두 속하는 것을 찾을 때 하기 마련인데, 이런식으로 where 구문을 활용하면 한쪽에만 속하는 관계도 join 으로 풀 수 있게 된다. hive에서는 이 형태의 쿼리도 수행속도가 무척 빠르다. 데이터 양이 엄청 많았음에도 불구하고. 


Only I can change me life, no one can do it for me. – Carol Burnett