본문 바로가기
엔지니어링

같은 스키마를 가진 파일들 안에서 여러개의 Athena 테이블이 만들어질 때

by 당나귀🐴 2022. 5. 17.

Glue 로 Glue Catalog 에 기록 후 Athena로 S3 에 있는 데이터 쿼리하기

문제의 배경

테이블을 만드는 방식은 Glue Crawler를 이용하였는데,

Glue Cralwer 를 통해서 테이블을 생성했을 때 하나의 스키마로 인지할 줄 알았던 폴더구조가 두 개로 인지했다.

 

예를 들어, A라는 버켓에 아래 두개의 Parquet 파일이 있고 두개의 Parquet 파일이 동일한 스키마를 지니고 있다고 했을 때,

  • A/2022/01/10/a.parquet
  • A/2021/01/10/b.parquet

예상 결과 : Glue Cralwer 가 크롤링 한 후 A 라는 테이블이 생성되고, 두개의 파일이 투영되는 것을 예상하였다.

실제 결과 : 2022,2021 라는 이름의 두 개의 테이블이 계속생성되었다

 

문제 해결 방식(테이블 임시 생성 후 파일 이동)

 

1. A/2021/01/10/b.parquet 는 또 다른 버켓에 옮기고, A/2022/01/10/a.parquet 만을 대상으로 Glue Cralwer 를 실행하였다.

  1. Athena 에 A 라는 테이블이 생성되었다.
  2. Ahtena 쿼리를 이용해서 A 라는 테이블에 2021/01/10 이라는 파티션을 추가하였다.
ALTER TABLE A ADD PARTITION (partition_0='2021', partition_1='01', partition_2='10')
location 's3://TEMP_A/2021/01/10/'

 

 

스키마를 맞춰주고 작업해서 그런지 2021/01/10 데이터가 문제없이 잘 투영되었다..

S3 의 관리 포인트가 하나 늘어났긴하지만 2021년 데이터는 아주 소수이다.

해당 데이터는 앞으로 업데이트될 계획도 없기 때문에 해당 버켓이 사라지지 않게만 관리하려고 한다...

 

예상

(2024.02.05) 해당 작업을 재현할 순 없지만 시간이 지난 후 생각해보면 S3 에 파일을 저장할 때 partition 을 지정한다면 시스템이 더 분명하게 partition 구조를 파악할 수 있지 않을까 생각한다.

  • A/partition_0=2022/partition_1=01/partition_2=10/a.parquet
  • A/partition_0=2021/partition_1=01/partition_2=10/b.parquet

 

 

참고

AWS 공식문서 : 파티션생성