일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- PySpark
- GIT
- array
- list
- Mac
- Excel
- SQL
- string
- dataframe
- django
- Tkinter
- Apache
- Kotlin
- Google Spreadsheet
- PostgreSQL
- gas
- PANDAS
- 파이썬
- math
- hive
- c#
- google apps script
- Google Excel
- Github
- Java
- numpy
- Python
- Redshift
- matplotlib
- Today
- Total
달나라 노트
Hive : first_value, last_value : 첫 번째 값, 마지막 값 뽑기(window function) 본문
Hive : first_value, last_value : 첫 번째 값, 마지막 값 뽑기(window function)
CosmosProject 2021. 6. 3. 00:16
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컬럼)이 생성되었습니다.
'SQL > Apache Hive' 카테고리의 다른 글
Hive : hive.mapred.mode (Hive data full scan하기. partition 모두 조회하기) (0) | 2021.06.04 |
---|---|
Hive : hive.exec.reducers (Reducer에 메모리 할당하기) (0) | 2021.06.04 |
Hive : GREATEST, LEAST (여러 값 중 최대/최소값 return) (0) | 2021.06.03 |
Hive : drop view if exists, create temporary view (temporary view 만들고 없애기) (0) | 2021.06.02 |
Hive : table 복구 불가능하게 drop하기. drop table ~ purge (0) | 2021.05.19 |