달나라 노트

Hive : first_value, last_value : 첫 번째 값, 마지막 값 뽑기(window function) 본문

SQL/Apache Hive

Hive : first_value, last_value : 첫 번째 값, 마지막 값 뽑기(window function)

CosmosProject 2021. 6. 3. 00:16
728x90
반응형

 

 

 

 

first_value, last_value는 window function으로서 이용 가능합니다.

 

first_value([column_name]) over(partition by [column_name] order by [column_name] rows between ~~ and ~~)
last_value([column_name]) over(partition by [column_name] order by [column_name] rows between ~~ and ~~)

예시를 보면 위처럼 사용할 수 있습니다.

해석을 해보면

partition by [column_name] = 이 컬럼을 parititon으로 나눠서

order by [column_name] = 이 컬럼 기준으로 정렬을 한 후

first_value([column_name]) = 이 컬럼의 첫 번째(가장 위쪽) 값을 뽑아냅니다.

last_value([column_name]) = 이 컬럼의 마지막 (가장 아래쪽) 값을 뽑아냅니다.

 

 

예시 테이블Table Name : salary_list

id part name salary
1 First_Part One 1000
2 First_Part Two 1900
3 First_Part Three 1400
4 First_Part Four 1700
5 First_Part Five 1400
6 Second_Part Six 1900
7 Second_Part Seven 1200
8 Second_Part Eight 1200
9 Second_Part Nine 1200
10 Second_Part Ten 1300

 

select  *
        , first_value(name) over (partition by part order by id rows between unbounded preceding and unbounded following) as col_first_value
        , last_value(name) over (partition by part order by id rows between unbounded preceding and unbounded following) as col_last_value
from salary_list
;

 

- Result Set

id part name salary col_first_value col_last_value
1 First_Part One 1000 One Five
2 First_Part Two 1900 One Five
3 First_Part Three 1400 One Five
4 First_Part Four 1700 One Five
5 First_Part Five 1400 One Five
6 Second_Part Six 1900 Six Ten
7 Second_Part Seven 1200 Six Ten
8 Second_Part Eight 1200 Six Ten
9 Second_Part Nine 1200 Six Ten
10 Second_Part Ten 1300 Six Ten

 

위 결과를 봅시다.

col_first_value는 part column을 기준으로 partition을 나눈 후 id 컬럼 기준으로 order by를 했을 때 name컬럼의 첫 번째 값을 반환합니다.

따라서 id가 1~5인 행에 대해서 가장 첫 번째 값인 One을 반환하고

id가 6~10인 행에 대해서 가장 첫 번째 값인 Six를 반환합니다.

또한 window function이기 때문에 원본 table data에는 변함이 없고 새로운 컬럼(col_first_value 컬럼)이 생성되었습니다.

 

col_last_value는 part column을 기준으로 partition을 나눈 후 id 컬럼 기준으로 order by를 했을 때 name컬럼의 마지막 값을 반환합니다.

따라서 id가 1~5인 행에 대해서 가장 마지막 값인 Five를 반환하고

id가 6~10인 행에 대해서 가장 마지막 값인 Ten을 반환합니다.

또한 window function이기 때문에 원본 table data에는 변함이 없고 새로운 컬럼(col_last_value컬럼)이 생성되었습니다.

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
Comments