SW-PRODUCT/개발-데이터분석

Hive Tips

굴돌 2016. 4. 4. 16:09



left outer join보다는 inner join을 쓴다.

- 왜그런진 모르겠는데..;; outer join보다는 inner join이 성능이 더 좋단다.

- 물론, left 테이블에 없어도될 것들이 join 되는 케이스를 고려한다면 inner가 당연히 효율이 좋은건데, 이 상황은 어차피 left 테이블 전체를 무조건 남겨야 하는 경우였음. 다만, 그 모든 값들이 right 테이블에도 들어있기 때문에 이론적으로 차이 없을듯한데..;;.. MR 특징이려나..;;


count(distinct ..)는 inner view의 group by로 푼다!

- http://stackoverflow.com/questions/19311193/why-is-countdistinct-slower-than-group-by-in-hive

- count(distinct ..)가 있는 쿼리는 하나의 reducer에서 distinct 처리까지 수행한다!!

- 즉, distinct를 맡은 reducer가 끝없이 수행될 리스크도 있다..;;

- group by로 풀어줘야 명시적으로 여러 reducer에 흩어서 처리한다.


불필요한 null, '' 등을 미리 제거한다!

- group by용 키의 값이 null, '' 등인 경우는 대부분쓸데없다.

- 그런데 ''인 값이 매핑되는 경우가 무수히 많을 경우...

- reducer 한놈이 이 값을 처리해야 해서 매우 힘들어할 수 있다.

- 꼭 필요한 경우가 아니면 group by 속성의 null, '' 등은 미리 where 조건에서 filter out 시키자.