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 |