[Hive] 하이브의 정렬, 집계, 유저 함수, 조인, 서브쿼리, 뷰의 정의
정렬과 집계
하이브의 데이터 정렬은 order by 절로 처리 가능
- 하지만 order by 처리하기 위해서는 모든 처리의 결과를 집계해야 하기 때문에 리듀서의 개수가 1개가 되어야 한다.
- 마지막 결과파일의 개수가 1개가 된다.
전체적인 정렬의 결과가 필요 없다면, sort by를 사용하면 된다.
- sort by는 리듀서당 정렬된 파일을 생성
어떤 경우에는 특정 로우가 특정 리듀서로 가도록 설계하여 집계연산을 사용하는 것이 좋다.
- distributed by가 이 역할을 한다.
sort by, distributed by에 사용되는 칼럼이 같다면 둘 다를 동시에 지정하기 위해 약칭으로 cluster by를 사용할 수 있다.
select year, temperature from records2 distribute by year sort by year, temperature;
조인
inner join, outer join 지원
세미 조인
- where 조건의 in 연산에 서브쿼리를 지원하지 않지만, 같은 결과를 얻을 수 있는 left semi join을 사용할 수 있음
- semi join의 아래의 테이블은 on 절에서만 보인다.
맵 조인
- 테이블 하나가 메모리에 적재될 만큼 충분히 작다면 하이브는 각 매퍼 단위로 조인을 수행할 수 있도록 작은 테이블을 메로리로 적재 시킬수 있다.
select /*+ MAPJOIN(things) */ sales.*, things.* from sales join things on (sales.id = things.id);
서브쿼리
서브쿼리는 from 절에서만 사용 가능
뷰
뷰는 생성 시점에 파일을 생성하지 않고, 메타스토어에 저정됨
사용자 정의 함수
사용자 정의함수(User Defined Function)
- 단일 로우를 처리하고 결과 또한 단일 로우로 내준다.
- 수학함수, 문자열 함수 등
사용자 정의 집계 함수(User Defined Aggregate Function)
- 다중입력 로우를 처리하고 단일 로우로 출력한다.
- count, max 등
사용자 정의 테이블 생성 함수(User Defined Table-generating Function)
- 단일 로우를 처리하고 다중로우를 생성