이전 포스팅에서는 mysql 에서 주단위 집계시에 주의해야 할 점에 대해서 이야기 했었다.
https://walkingfox.tistory.com/159
이번 글에서는 같은 내용을 presto 나 athena 에서 어떻게 처리할 지 이야기 해보겠다.
presto 에서도 mysql에서와 같이 case when 구문을 이용하면 비슷한 방식으로 처리할 수 있지만, 역시나 sql 문장이 장황하게 길어진다.
대신 presto 에서는 year_of_week(날짜) 라는 함수를 이용하면 쉽게 처리할 수 있다.
예를 들어서 2022년 01월 02일 (일요일) 은 주단위로는 2021년의 52번째 주에 해당이 되고,
2022년 01월 03일 (월요일) 은 주단위로는 2022년의 1번째 주에 해당이 된다.
그래서 date_format(date('2022-01-02'), '%Y-%v') 는 2022-52 의 값을
그리고 date_format(date('2022-01-03'), '%Y-%v') 는 2022-01 의 값을 출력하여 1월 2일의 경우 잘못된 주로 계산이 되기 쉽다.
그런데 presto 의 year_of_week 함수를 사용하면 아래와 같이 자동으로 해당 주의 연도를 계산해준다.
year_of_week(date('2022-01-02')) 는 2021 로
year_of_week(date('2022-01-03')) 는 2022 로 값을 반환한다.
아래와 같이 concat 으로 문자열을 묶어주면 연도(yyyy)-w주번호 의 형태로 쉽게 계산 할 수 있다.
select concat(cast(year_of_week(date'2022-01-02') as varchar), date_format(date'2022-01-02', '-w%v')) as week1
, concat(cast(year_of_week(date'2022-01-03') as varchar), date_format(date'2022-01-03', '-w%v')) as week2
[참고]
athena 에서는 mysql 에서 사용하는 format string 을 거의 그대로 지원하지만, 아래의 것은 아직 지원되지 않고 있다.
The following specifiers are not currently supported: %D %U %u %V %w %X
'분석 > 데이터분석' 카테고리의 다른 글
[SQL] 데이터 PIVOT 하기 (presto, athena) (0) | 2022.06.09 |
---|---|
[redash] 쿼리에서 필터 사용법 (filter, multi-filter) (0) | 2022.06.07 |
[SQL] null 체크 (presto, athena) (0) | 2022.06.03 |
[SQL] 날짜 차이 계산하기 (presto, athena) (0) | 2022.05.23 |
[SQL] 주단위 집계 꼭!! 주의해야할 점 (MySql) (0) | 2022.05.16 |