Hive 0.11 will support analytic and windowing functions.


하이브 0.11이 곧 릴리즈 할 것 같다. 이미 빌드 메니저가 0.11 branch를 따는 중인 듯. 곧 출시할 0.11에는 분석함수와 윈도우 함수가 추가될 예정이다.

이 이슈도 오래 끌 줄 알았는데 이번에 trunk에 커밋이 되었다.


하둡 서밋 2012에 SAP에서 하이브 분석함수 관련해서 발표를 하고 github에 코드를 공개했던 harish butani가 하이브에 코드를 기여했다.

문서가 없어서 patch를 살펴 보니, 지원되는 함수가 많다. (오라클에서 지원하는 함수 거의 다 지원하는 듯)


rank, dense_rank, lag, lead, sum, count, cume_dist, percent_rank, ntile, avg, stddev, first_value, last_value, min, max, stddev_pop, collect_set, variance, corr, covar_pop, row_number, percentile, histogram_numberic


이야. Harish butani 이 사람 좀 대단하다. 물론 그전에 오랬동안 개발해 온 것이지만 그동안 분석함수 때문에 하이브를 외면했던 사용자는 다시 돌아와야 할 듯. 윈도우윙 절은 하이브 특성상 partition by, order by 구문 대신 distribute by, sort by 구문으로 바뀐 것이 차이점이다.


예제 쿼리를 하나 보자면 다음과 같다.

select p_mfgr, p_name, p_size,
    sum(p_retailprice) over (distribute by p_mfgr sort by p_size range between current row and unbounded following) as s1
from part ;

 분석함수는 MySQL에서는 지원하지 않는다. 오라클에서 8.1x 버전 부터 지원 됐고, 집계 함수(aggregation function)과 차이점 이라면 집계 함수는 그룹 별로 하나의 행을 결과로 내지만 분석 함수는 결과 셋이 줄지 않는다. 쿼리가 간단해지고 실제 수행 시간도 단축된다는 장점 있다.


 흔히 우리가 집계 함수라고 알고 있는 min, max 도 뒤에 윈도우 절이 붙으면 리포팅 집계 함수로서 분석함수로 처리 된다. 윈도우라는 개념은 하나의 파티션에서 각각 행에 대해서 미끄러지는 창(sliding window)라고 할 수 있다. 현재 행(current row)에 대해서 분석 함수를 처리할 파티션의 정의를 윈도우 절에서 하게 된다.

 

분석 함수의 처리순서는 다음과 같다.

  1. 조인, WHERE, GROUP BY, HAVING 절을 수행한 이후에
  2. 분석 함수가 처리할 결과 셋이 만들어지고 계산이 수행된다.
  3. ORDER BY 절이 있다면, 최종 결과의 순서를 정렬한다.


하이브 0.11에는 HiveServer2, Decimal 데이터 타입, 분석함수 등 많은 향상이 있을 예정이다.


Posted by 김민우 julingks

댓글을 달아 주세요