AWS Athena의 테이블을 파티션으로 관리 하고 있다면 파티션이 생성될때마다 DDL을 실행해야한다.
구체적으로 아래와 같은 커맨드를 실행할 필요가 있다. (파티션 dt=2017-12-31 을 추가하는 경우)
ALTER TABLE 테이블명ADD IF NOT EXISTS PARTITION (dt='2017-12-31') location 's3://aaa/bbb/dt=2017-12-31'
실제 운영에서는 위의 파티션 추가 커맨드를 정기적으로 실행할 필요가 있으므로 파이썬을 이용해 간단한 스크립트를 작성하여 사용하면 편리하다.
import sys
import boto3
import datetime
# get a batch date and change date format
param_date = sys.argv[1]
dt_tmp = datetime.datetime.strptime(param_date, '%Y%m%d')
dt_folder = dt_tmp.strftime('%Y-%m-%d')
table_name = '테이블명'
s3_path = """s3://aaa/bbb/dt=%s""" % (dt_folder)
client = boto3.client('athena')
sql = """ALTER TABLE %s ADD IF NOT EXISTS PARTITION (dt='%s') location '%s'""" % (table_name, dt_folder, s3_path)
client.start_query_execution(
QueryString=sql,
QueryExecutionContext={
'Database': '디비명'
},
ResultConfiguration={
'OutputLocation': 's3://쿼리결과임시저장경로'
}
)
실제 파티션이 제대로 추가 되었는지는 Athena쿼리창에서 아래 커맨드를 실행하여 확인 가능하다.
show partitions 테이블명
[결과]
dt=2017-09-30
dt=2017-10-31
dt=2017-11-30
dt=2017-12-31
파티션은 있으나 파티션내에 데이터가 존재하지 않는다면 아래와 같은 쿼리를 실행했을 경우에는 파티션이
존재하지 않는 것처럼 보일 수 있으니 주의가 필요하다.
(2017-12-31 파이션은 있으나 실제 데이터는 없을 경우의 예)
select dt from 테이블명 group by dt
[결과]
dt
2017-09-30
2017-10-31
2017-11-30
'AWS' 카테고리의 다른 글
AWS S3 다른 유저에게 공유하기 (0) | 2017.11.17 |
---|