[hive][db] rank() 함수를 이용하여 그룹별로 상위 n개의 결과만 출력하는 방법

2017. 12. 27. 15:17·빅데이터/hive

그룹별로 상위 n개의 데이터만 출력하는 방법은 윈도우 함수(window function) 중에서 RANK() 함수를 이용한다. 


RANK 함수는 ORDER BY를 포함한 쿼리에서 특정 칼럼의 순위를 구하는 함수이다. 


아래와 같이 PARTITION BY, ORDER BY 를 함께 이용하여 그룹별로 순위를 구할 수 있고,

이 순위를 이용하여 상위 n개의 결과만 출력이 가능하다. 


SQL>  SELECT JOB, ENAME, SAL,
             RANK( ) OVER (ORDER BY SAL DESC) ALL_RANK, 
             RANK( ) OVER (PARTITION BY JOB ORDER BY SAL DESC) JOB_RANK
      FROM EMP;

JOB       ENAME             SAL   ALL_RANK   JOB_RANK
--------- ---------- ---------- ---------- ----------
PRESIDENT KING             5000          1          1
ANALYST   FORD             3000          2          1
ANALYST   SCOTT            3000          2          1
MANAGER   JONES            2975          4          1
MANAGER   BLAKE            2850          5          2
MANAGER   CLARK            2450          6          3
SALESMAN  ALLEN            1600          7          1
SALESMAN  TURNER           1500          8          2
CLERK     MILLER           1300          9          1
SALESMAN  WARD             1250         10          3
SALESMAN  MARTIN           1250         10          3
CLERK     ADAMS            1100         12          2
CLERK     JAMES             950         13          3
CLERK     SMITH             800         14          4
 

14 rows selected.


아래와 같이 table1의 map_data 칼럼(맵형식)을 explode() 함수를 이용하여 

테이블 형태로 변환하고 그중에 키 값을 기준으로 정렬하여 첫번째 데이터만 출력하도록 구현할 수 있다. 


SELECT distinct rrr.key, rrr.value

FROM (

    SELECT rr.key, 

           rr.value, 

           RANK() OVER(PARTITION BY rr.key ORDER BY rr.value) as row_num

      FROM (

        SELECT key, value

          FROM table1

       LATERAL VIEW explode(map_data) r as key, value

    ) rr

    WHERE length(rr.value) == 10  

) rrr

WHERE rrr.row_num = 1

;


http://wiki.gurubee.net/pages/viewpage.action?pageId=26744104

하이브 윈도우 함수 


반응형
저작자표시 비영리 (새창열림)

'빅데이터 > hive' 카테고리의 다른 글

[hive] 테이블 생성시 예약어를 사용하는 방법  (0) 2018.02.08
[hive] java.lang.OutOfMemoryError: Java heap space 오류 수정  (0) 2018.01.03
[hive] 하이브 성능 최적화 방안  (0) 2017.12.26
[hive] explode, lateral view 사용 예제  (0) 2017.12.26
[hive] drop table partitions 의 null 오류  (0) 2017.12.21
'빅데이터/hive' 카테고리의 다른 글
  • [hive] 테이블 생성시 예약어를 사용하는 방법
  • [hive] java.lang.OutOfMemoryError: Java heap space 오류 수정
  • [hive] 하이브 성능 최적화 방안
  • [hive] explode, lateral view 사용 예제
hs_seo
hs_seo
Hello World!
    반응형
  • hs_seo
    개발자로 살아남기
    hs_seo
  • 전체
    오늘
    어제
    • 전체 (1140)
      • 개발자 (21)
        • 개발에 유의할 점 (0)
        • 면접 (5)
      • IT 소식 (5)
        • 업계 (1)
      • java (51)
        • 디자인패턴 (3)
        • apache-common (1)
      • 개념 (47)
        • 자료구조 (4)
        • 함수형사고 (8)
        • 디자인패턴 (1)
      • 데이터분석 (1)
      • python (67)
        • 코드조각 (12)
        • 라이브러리 (2)
      • 빅데이터 (418)
        • zookeeper (5)
        • hadoop (78)
        • hdfs (12)
        • hive (127)
        • hbase (16)
        • spark (40)
        • scala (4)
        • trino (3)
        • oozie (41)
        • Hue (9)
        • R (5)
        • sqoop (6)
        • flume (3)
        • elasticsearch (2)
        • airflow (16)
        • kafka (3)
        • kubernetes (10)
        • openstack (3)
        • flink (2)
        • redis (2)
      • 빅데이터 강좌 (2)
      • 알고리즘 (131)
        • 알고리즘 (1)
        • 백준 (61)
        • 정올 (41)
        • 더블릿 (5)
        • 프로그래머스 (1)
      • 프로그래밍 언어 (30)
        • go (4)
        • js (9)
        • .Net (6)
        • Jsp (1)
        • ansible (3)
        • terraform (6)
      • Tools (56)
        • docker (2)
        • macbook (6)
        • maven (3)
        • sublime (1)
      • 프레임워크 (25)
        • [JS] angularjs (2)
        • [JS] node.js (19)
        • [Java] spring (2)
        • Android (2)
      • 데이타베이스 (43)
        • SQLD (5)
        • Oracle (1)
        • MySQL (8)
        • ADsP (2)
      • 리눅스 (25)
        • Bash (61)
      • GCP (5)
      • AWS (34)
        • EC2 (2)
        • EMR (14)
      • 정보보안기사 (4)
        • 네트워크 (1)
      • 개인 (80)
        • 업무실수 (0)
        • 책 (9)
        • 교육 (3)
        • 여행 (17)
        • 영화 (12)
        • 음악 (2)
        • 피규어 (4)
        • 게임 (3)
        • 생각 (7)
        • 기타 (10)
        • 좋은글 (5)
        • 좋은 사이트 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

    • 빅데이터-하둡,하이브로 시작하기
    • 빅데이터-스칼라, 스파크로 시작하기
    • Kaggle에서 파이썬으로 데이터 분석 시작하기
    • 쉘스크립트 개발 시작하기
    • 개발자가 데이터 분석 준전문가 되기
    • 데브쿠마
  • 공지사항

  • 인기 글

  • 태그

    백준
    AWS
    알고리즘
    Python
    하둡
    정올
    hbase
    HDFS
    k8s
    java
    build
    bash
    Hadoop
    HIVE
    Tez
    오류
    다이나믹
    파이썬
    yarn
    S3
    mysql
    airflow
    nodejs
    emr
    oozie
    ubuntu
    SPARK
    Linux
    하이브
    error
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.6
hs_seo
[hive][db] rank() 함수를 이용하여 그룹별로 상위 n개의 결과만 출력하는 방법
상단으로

티스토리툴바