본문 바로가기

오픈소스/pig

Pig - ROW_NUMBER (RANK)

ROW_NUMBER 혹은 RANK 함수를 통해 임의의 필드들에 의해 정렬된 결과그룹 중에 상위 1개의 결과를 반환

SQL Version (Oracle)

SELECT uname, flag, rank, score
  FROM (
        SELECT uname, flag, rank, score, ROW_NUMBER() OVER (PARTITION BY uname ORDER BY flag ASC, rank DESC, score ASC) rank
        FROM A
  ) B
WHERE B.rank=1;

Pig Version

-- rownum.pig
a = load 'source/rownum.csv' using PigStorage(',')
 as (uname:chararray, flag:int, rank:chararray, score:int);
b = group a by uname;
c = foreach b { 
  sort = order a by flag, rank desc, score;
  sort_limit = limit sort 5;
  generate flatten(sort_limit);
}
dump c

source/rownum.csv

park,2,x,4
park,1,c,16
park,1,c,15
park,2,y,16
park,1,a,64
kim,3,c,45
kim,2,b,60
kim,2,b,50
kim,3,z,60
kim,3,z,4


'오픈소스 > pig' 카테고리의 다른 글

PIG - Exceeded max jobconf size  (0) 2013.06.19
Pig - COGROUP  (0) 2012.11.28
Pig - UPSERT (UPDATE or INSERT)  (0) 2012.11.05