Post

AWS Athena 가이드

AWS Athena 가이드

AWS Athena

AWS Athena란

  • Amazon Web Services(AWS)의 대화형 쿼리 서비스로, 표준 SQL을 사용하여 Amazon S3에 저장된 대규모 데이터를 쉽게 분석할 수 있는 서비스. Athena는 서버리스 아키텍처를 기반으로 하여 확장성이 뛰어남.

테이블 최적화 방법

Partitioning과 Bucketing

  • Partitioning 테이블을 분할하여 관리하는 방법
    • 일반적으로 날짜 단위를 사용
  • Bucketing 테이블의 특정 키 기반으로 분리하여 처리하는 방법
    • 키 기반 정렬 및 검색에 용이
  • Index는 지원하지 않음

Flattening

  • Flat 중첩 데이터를 풀어 테이블을 flat하게 변환하는 방법
    • 구조의 개별 항목을 사용하는 json 및 struct 구조에서 활용 가능
    • 중첩 데이터 안의 불필요 데이터가 많을 경우 성능 개선의 효과가 있음
    • 예) SELECT id, data.name FROM dataset.table CROSS JOIN UNNEST(data) AS t(data)

Pivoting

  • 행과 열을 바꿔 구성하는 방법
    • 동일 행이 중복되거나 행이 key, value형태일 때 활용 가능
    • 대체적으로 열 검색이 빨라 성능 개선 효과가 있음
    • 불필요 열이 많아질 수 있으므로 주의가 필요함
    • 예) SELECT id, MAX(CASE WHEN key = 'name' THEN value END) AS name FROM dataset.table CROSS JOIN UNNEST(data) AS t(key, value) GROUP BY id

쿼리 속도 개선 방법

  • SELECT * 사용 자제
  • Partitioned 또는 Bucketed 열을 필수적으로 쿼리에 포함
  • WITH 절 사용 권장
    • WITH 절을 사용하여 데이터를 한정하면 속도가 개선됩니다.
  • 윈도우 함수 사용 권장
    • 전체 데이터를 ORDER BY 처리하는 것보다 RANK()등 윈도우 함수를 쓰는 것이 더 효율적입니다.
  • LIMIT 절 활용
    • 테스트 또는 rank를 처리할 경우 LIMIT 절을 사용하는 것이 좋습니다.
  • 쿼리 성능 모니터링 활용
    • Athena 콘솔에서 쿼리 실행 통계를 확인하여 쿼리 성능을 모니터링합니다.
  • 쿼리 결과 캐싱
    • Athena의 쿼리 결과는 버킷에 csv파일로 저장되어 캐싱됩니다. 하지만 변하지 않는 데이터의 경우 파일로 캐싱하는 것이 훨씬 효율적입니다.
    • 주의 CTAS를 활용할 경우 별도의 테이블을 만들어 처리하므로 버킷에 캐싱되지 않습니다.

제약 사항

  • Athena는 DML 쿼리의 런타임을 30분으로, DDL 쿼리의 런타임을 600분으로 제한
  • 메모리가 부족해도 자동 취소됨
  • 입력된 데이터 형태가 맞지 않는 경우 오류
  • Amazon S3는 요청 수를 초당 5,500개로 제한

참고

This post is licensed under CC BY 4.0 by the author.