Athena와 S3를 활용하여 데이터를 조회하는 경우,
아테나에 테이블도 생성하고, S3 데이터도 잘 있고, 경로도 제대로 설정했음에도 불구하고
데이터 조회가 되지 않는 문제가 발생할 수 있습니다.
이번 글에서는 이와 같은 상황에서 발생할 수 있는 문제와 그 해결 과정을 공유합니다.
문제 상황
- S3에 데이터 파일이 업로드되어 있음.
- 예: s3://example-bucket/data/dt=2024-12-29/ 경로에 파일이 존재.
- Athena에 테이블 생성 완료.
- 테이블 정의
CREATE EXTERNAL TABLE example_table (
column1 string,
column2 string
)
PARTITIONED BY (dt date)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://example-bucket/data/';
3. 데이터 조회
SELECT * FROM example_table WHERE dt = date '2024-12-29';
-- 조회했으나, 분명 값이 있는데 값이 하나도 나오지 않음
문제 원인 및 해결 방법
1. 파티션 등록 문제
- 원인:
- 테이블을 PARTITIONED BY로 생성했지만, S3의 파티션 정보가 Athena 메타스토어에 등록되지 않은 경우
- Athena에서 PARTITIONED BY 로 정의된 테이블은 파티션 정보를 명시적으로 추가해야 데이터가 조회됨
- 확인 :
- 파티션 정보 확인
SHOW PARTITIONS <table_name>;
-- ++추가정보) 메타스토어에 등록된 불필요한 파티션 제거
-- ALTER TABLE <table_name> DROP PARTITION (dt='2024-12-28');
- 해결 방법:
- 특정 테이블에 대해 파티션 정보를 메타스토어에 등록
- 아래 명령어를 통해 , S3 경로를 스캔하여 메타스토어에 파티션 정보 동기화(누락된 파티션 추가 또는 복구)
MSCK REPAIR TABLE <table_name>;
2. 데이터 형식 불일치
- 원인:
- Athena는 테이블 스키마와 S3 데이터 파일 간 불일치
- 확인:
- S3 데이터 파일의 컬럼 순서가 테이블 스키마와 동일한지 확인
- 데이터 파일의 구분자(FIELDS TERMINATED BY ',') 와 스키마에서 정의한 구분자가 일치하는지 확인
- 데이터 파일에서 누락된 컬럼이나 잘못된 데이터 형식이 있는지 확인
3. 파일 내 헤더 문제
- 원인:
- S3 데이터 파일의 첫 줄이 컬럼 헤더일 경우, 쿼리 결과가 누락되거나 오류가 발생할 수 있습니다.
- 해결 방법:
- 테이블 생성 시 TBLPROPERTIES에 헤더 무시 속성을 추가:
- TBLPROPERTIES ('skip.header.line.count' = '1');
결론
Athena에서 S3 데이터를 조회할 때 문제가 발생하면, 아래 사항을 확인하세요:
- S3 데이터의 경로와 테이블 정의의 LOCATION이 일치하는지.
- 파티션 정보가 제대로 등록되었는지.
- 테이블의 데이터 타입과 쿼리의 조건이 호환되는지.
- 헤더 무시 옵션 등 파일 형식 관련 설정이 올바른지.
위 과정을 따라가면 대부분의 문제를 해결할 수 있습니다!!
728x90
'IT_Engineer > DataEngineer' 카테고리의 다른 글
[DE] 데이터 엔지니어를 위한 AWS#3 Glue: ETL 작업 자동화하기 (2) | 2024.11.24 |
---|---|
[DE] 에어플로우 DAG 최적화와 모니터링 기법 (0) | 2024.11.21 |
[DE] Spark + Airflow #2: Airflow와 Spark를 활용한 데이터 처리 파이프라인 완성하기 (3) | 2024.11.20 |
[DE] Spark + Airflow #1: Spark on Kubernetes 구현하기 (0) | 2024.11.19 |
[DE] 데이터 엔지니어를 위한 AWS#2 Lambda: S3 이벤트 기반 파일 처리 자동화 (2) | 2024.11.18 |