hadoop
[hive] count와 distinct 이슈
'김용환'
2016. 4. 20. 08:36
하이브에서 COUNT와 DISTINCT를 동시에 사용할 때,
하이브는 mapred.reduce.tasks = 20으로 설정 리듀스 개수를 무시하고 오직 하나의 리듀서만 사용한다.
데이터가 클 때 병목이 발생한다.
이 방식의 해결책은 서브쿼리를 사용한다.
예시)
* COUNT와 DISTINCT를 동시에 쓰면 하나의 리듀스에서만 실행된다.
SELECT count(distinct age) FROM member;
* 서브 쿼리를 사용하면, 리듀스 작업을 mapred.reduce.tasks로 설정한 값으로 동작한다. DISTINCT를 사용하여 하나 이상의 리듀서를 사용하여 상대적으로 작은 양의 데이터에 COUNT를 실행한다. 따라서 리듀서 병목이 사라진다.
SELECT count(*) FROM (SELECT distinct age FROM member) a;