본문 바로가기
IT_Engineer/DataEngineer

S3에 데이터가 분명 있는데, 아테나에서 조회가 안 될 때!!

by 좋은데이피치 2024. 12. 31.

Athena와 S3를 활용하여 데이터를 조회하는 경우,
아테나에 테이블도 생성하고, S3 데이터도 잘 있고, 경로도 제대로 설정했음에도 불구하고
데이터 조회가 되지 않는 문제가 발생할 수 있습니다.

이번 글에서는 이와 같은 상황에서 발생할 수 있는 문제와 그 해결 과정을 공유합니다.


문제 상황

  1. S3에 데이터 파일이 업로드되어 있음.
    • 예: s3://example-bucket/data/dt=2024-12-29/ 경로에 파일이 존재.
  2. 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 데이터를 조회할 때 문제가 발생하면, 아래 사항을 확인하세요:

  1. S3 데이터의 경로와 테이블 정의의 LOCATION이 일치하는지.
  2. 파티션 정보가 제대로 등록되었는지.
  3. 테이블의 데이터 타입과 쿼리의 조건이 호환되는지.
  4. 헤더 무시 옵션 등 파일 형식 관련 설정이 올바른지.

위 과정을 따라가면 대부분의 문제를 해결할 수 있습니다!!

728x90

최근댓글

최근글