Amazon Athena (Presto 0.172)에서 날짜를 비교하여 지난 달 이후의 데이터 검색
하고 싶은 일
설명
※ 문중 base_date 는 date형
MySQL 등의 노리로, 날짜를 timestamp 형으로 해
base_date >='2019-05-01'
라는 느낌으로 해도
'>=' cannot be applied to timestamp
그리고 화가납니다.
base_date>= CAST('2019-05-01' AS TIMESTAMP)
어쨌든 할 수 있습니다.
또한 같은 Presto에서도 Treasure Data의 경우 날짜의 고유 함수가 있지만 Amazon Athena에는 물론 그런 것은 없으므로 Presto 0.172를 따라 어떻게든 가야합니다.
htps : // / cs. 아 ws. 아마존. 이 m / 그럼 _ jp / 아테나 / 아 st / 우 g / 훙 c 치온 s- 오페라와 rs - 르후 렌 세세 c 치온. HTML
htps // p s와 db. 기주 b. 이오/도 cs/0.172/푼c 치온 s/다테치메. HTML
지난달 이후 데이터 얻기
date형의 컬럼에 대해서, 지난 달 이후의 데이터를 취득
select
base_date -- ★date型で持ってる
from tablename
where base_date >= date_trunc('month', current_timestamp)- interval '1' month
order by base_date
limit 10;
문자열 유형의 날짜 (?)에 대해 지난 달 이후의 데이터 검색
select
base_date_string -- ★string型で持ってる
from tablename
where CAST(base_date_string AS TIMESTAMP) >= date_trunc('month', CAST(current_timestamp AS TIMESTAMP)- interval '1' month)
order by base_date_string
limit 10;
다양한 시도한 쿼리
문자열의 날짜를 월로 변환하고, 이달의 지난 달을 가져오고, 문자열로 되돌립니다.
select
base_date_string ,-- ★string型で持ってる
date_trunc('month', CAST(base_date_string AS TIMESTAMP)) as trunc_month,
date_trunc('month', current_timestamp) as thismonth,
date_trunc('month', current_timestamp)- interval '1' month as lastmonth,
substr( cast( date_trunc('month', CAST(current_timestamp AS TIMESTAMP)- interval '1' month ) as varchar) ,1,10) as "yyyy-mm-dd-string"
from tablename
order by base_date_string
limit 10
↓결과↓
빠진 점 (추기)
응용적으로 "어제까지의 데이터"를 원하는 쿼리를 쓰고 있고, 몇 번 "동작 검증은 잘 가지만 아침 배치 처리를 통해 실행하면 잘 데이터를 얻을 수 없다"는 일이 일어나고 있었다.
문득
select current_timezone()
_col0
1 UTC
해결
처럼 하루 동안 검증을 한다고 판정되지만, 아침이라고 아직 UTC에서 날이 바뀌지 않았기 때문에 반드시 1일 어긋나면···.
시간대를 지정할 수 있기 때문에
current_timestamp AT TIME ZONE 'Asia/Tokyo'
야
now() AT TIME ZONE 'Asia/Tokyo'
하는 것으로 해결.
Reference
이 문제에 관하여(Amazon Athena (Presto 0.172)에서 날짜를 비교하여 지난 달 이후의 데이터 검색), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/yuji_saito/items/82df1c25813215e0c0ae
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
base_date >='2019-05-01'
base_date>= CAST('2019-05-01' AS TIMESTAMP)
date형의 컬럼에 대해서, 지난 달 이후의 데이터를 취득
select
base_date -- ★date型で持ってる
from tablename
where base_date >= date_trunc('month', current_timestamp)- interval '1' month
order by base_date
limit 10;
문자열 유형의 날짜 (?)에 대해 지난 달 이후의 데이터 검색
select
base_date_string -- ★string型で持ってる
from tablename
where CAST(base_date_string AS TIMESTAMP) >= date_trunc('month', CAST(current_timestamp AS TIMESTAMP)- interval '1' month)
order by base_date_string
limit 10;
다양한 시도한 쿼리
문자열의 날짜를 월로 변환하고, 이달의 지난 달을 가져오고, 문자열로 되돌립니다.
select
base_date_string ,-- ★string型で持ってる
date_trunc('month', CAST(base_date_string AS TIMESTAMP)) as trunc_month,
date_trunc('month', current_timestamp) as thismonth,
date_trunc('month', current_timestamp)- interval '1' month as lastmonth,
substr( cast( date_trunc('month', CAST(current_timestamp AS TIMESTAMP)- interval '1' month ) as varchar) ,1,10) as "yyyy-mm-dd-string"
from tablename
order by base_date_string
limit 10
↓결과↓
빠진 점 (추기)
응용적으로 "어제까지의 데이터"를 원하는 쿼리를 쓰고 있고, 몇 번 "동작 검증은 잘 가지만 아침 배치 처리를 통해 실행하면 잘 데이터를 얻을 수 없다"는 일이 일어나고 있었다.
문득
select current_timezone()
_col0
1 UTC
해결
처럼 하루 동안 검증을 한다고 판정되지만, 아침이라고 아직 UTC에서 날이 바뀌지 않았기 때문에 반드시 1일 어긋나면···.
시간대를 지정할 수 있기 때문에
current_timestamp AT TIME ZONE 'Asia/Tokyo'
야
now() AT TIME ZONE 'Asia/Tokyo'
하는 것으로 해결.
Reference
이 문제에 관하여(Amazon Athena (Presto 0.172)에서 날짜를 비교하여 지난 달 이후의 데이터 검색), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yuji_saito/items/82df1c25813215e0c0ae텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)