문제의 배경
테이블을 만드는 방식은 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 를 실행하였다.
- Athena 에 A 라는 테이블이 생성되었다.
- 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 와 GCP 에서 Docker 기반 인스턴스의 네트워크 차이(Compute Engine / EC2 ) - 포트포워딩 (0) | 2022.11.08 |
---|---|
DataFrame을 압축하는 형태({‘snappy’, ‘gzip’, ‘brotli’ ) 알아보기 - Parquet 와는 어떻게 다를까? (0) | 2022.06.06 |
리눅스 grep 명령어 (0) | 2022.05.04 |
리눅스 SED 명령어 (0) | 2022.05.04 |
아테나(Athena)의 데이터베이스와 Glue Data Catalog 데이터베이스의 차이 (0) | 2022.05.04 |