AWS2017. 12. 27. 16:17

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
Posted by 유나아빠