AWS

AWS Athena 개념 및 예제

개발기록자 2023. 6. 24.

AWS Athena

AWS Athena
https://aws-icons.com/icons/athena

AWS Athena는 서버리스 쿼리 서비스로, 대량의 데이터를 신속하고 간편하게 분석할 수 있는 도구입니다. 이 서비스를 통해 서버 설정이나 관리 없이 데이터를 쉽게 탐색하고 분석할 수 있습니다. 이번 글에서는 AWS Athena에 대한 내용과 간단한 예제를 진행해 보겠습니다.


AWS Athena란

AWS Athena는 Amazon Web Services(AWS)에서 제공하는 서버리스 대화형 쿼리 서비스로, 사용자가 표준 SQL을 사용하여 S3에 저장된 데이터를 직접 쿼리하고 분석할 수 있도록 합니다. 이를 통해 사용자는 별도의 서버를 프로비저닝 하거나 관리하지 않고도 쉽고 빠르게 데이터를 분석할 수 있습니다.


Athena 기능 및 특징

서버리스 아키텍처 : 아테나는 서버리스 아키텍처로 사용자는 별도의 인프라 관리 없이 데이터를 쿼리할 수 있습니다.

 

표준 SQL로 간편한 사용성 : 아테나는 표준 SQL을 지원하므로 SQL 쿼리에 익숙한 사용자는 쉽게 데이터를 분석할 수 있습니다.

 

데이터 쿼리 : 아테나를 사용하여 SQL 쿼리를 실행하여 S3에 저장된 데이터를 분석할 수 있습니다. 사용자는 표준 SQL 문법을 사용하여 데이터를 필터링, 조인, 집계 등 다양한 작업을 수행할 수 있습니다.

 

파티셔닝 : 아테나는 데이터를 파티션으로 분할하여 데이터 쿼리의 성능을 향상시킬 수 있습니다. 데이터를 파티션으로 구성하면 필요한 데이터만 쿼리하여 처리 시간을 단축할 수 있습니다.

 

데이터 카탈로그 : 아테나는 AWS Glue(Data Catalog)와 통합되어 데이터 카탈로그를 사용하여 메타 데이터를 관리할 수 있습니다. 이를 통해 데이터셋의 스키마, 테이블 및 파티션 정보를 관리하고 데이터를 쉽게 검색할 수 있습니다.


AWS Athena 사용해보기

앞에서 작성했던 Riot API를 이용하여 생성한 데이터를 사용할 예정입니다. [Riot API 데이터 수집]

데이터에 대한 내용과 예시는 [Riot API 데이터 수집]을 참고하시면 됩니다.

생성한 데이터는 Parquet 변환하여 S3에 업로드하고, AWS Athena에서 쿼리 실행 [CSV 파일 Parquet 변환]

Parquet 변환하지 않고 CSV 형태로도 사용할 수 있습니다. (테이블 생성 시 별도 작업 필요)

 

1. 테이블 생성

테이블을 생성하는 방법은 DDL문으로 생성하는 방법과 Athena에서 제공하는 기능을 이용하는 방법이 있으며 원하는 방법을 선택하여 테이블을 생성할 수 있습니다. 사용하는 데이터의 크기가 크지 않아 파티션 없이 생성하였습니다.

 

① DDL문으로 생성

CREATE EXTERNAL TABLE `team`(
  `match_id` string COMMENT '', 
  `team_id` int COMMENT '', 
  `queue_id` int COMMENT '', 
  `first_blood` boolean COMMENT '', 
  `first_tower` boolean COMMENT '', 
  `first_inhibitor` boolean COMMENT '', 
  `first_baron` boolean COMMENT '', 
  `first_dragon` boolean COMMENT '', 
  `first_rift_herald` boolean COMMENT '', 
  `win` boolean COMMENT '', 
  `bans_list` array<int> COMMENT '', 
  `game_duration` string COMMENT '', 
  `game_start_timestamp` string COMMENT '', 
  `game_end_timestamp` string COMMENT '')
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
  's3://버킷명/team'
TBLPROPERTIES (
  'classification'='parquet', 
)

 

② 제공하는 기능으로 생성

Athena 테이블 생성 1Athena 테이블 생성 2

 

2. SQL 작성

team 테이블은 team에 대한 데이터로, 팀의 승리여부, 첫 킬, 첫 바론, 첫 드래곤, 밴 리스트 등의 값이 있습니다. 아래 쿼리는 team 데이터의 밴 리스트를 이용하여 전체 게임 중 각 챔피언에 대한 밴률을 알아보는 쿼리입니다.

WITH distinct_match AS(
    SELECT
        DISTINCT match_id
    FROM team
    WHERE queue_id = 420 -- 솔로 랭크
)

SELECT
    g.champion_id,
    c.champion_name,
    g.ban_count,
    g.game_count,
    ROUND((CAST(g.ban_count AS DOUBLE) / g.game_count) * 100, 2) AS ban_percent
FROM (
    SELECT
        champion_id,
        COUNT(champion_id) AS ban_count,
        (SELECT COUNT(match_id) FROM distinct_match) AS game_count
    FROM distinct_match dm
    INNER JOIN (
        SELECT
            match_id,
            ban as champion_id
        FROM team
        CROSS JOIN UNNEST(bans_list) t(ban)
        GROUP BY match_id, ban
    ) t
    ON dm.match_id = t.match_id
    GROUP BY champion_id
) g
INNER JOIN champion c
ON g.champion_id = C.champion_id
ORDER BY CAST(g.ban_count AS DOUBLE) / g.game_count DESC

 

결과

Athena 결과

 

3. 결과 비교

해당 데이터는 일부 데이터(약 일주일의 기간과 1% 미만의 사용자)를 기반으로 계산하였습니다. 적은 데이터를 이용하여 밴률 수치에 대한 차이가 존재하지만, 전반적인 분포는 비슷하게 일치하는 것으로 보입니다.

 

① OP.GG

OPGG 밴률
https://www.op.gg/statistics/champions?region=kr

 

② FOW.kr

FOW 밴률
https://fow.kr/stats


함께 보면 좋은 글

 

AWS S3 - 클라우드 스토리지 서비스

Amazon S3 현대 디지털 시대에서는 데이터의 양과 중요성이 이전보다 더욱 증가하였으며, 기업들은 대량의 데이터를 안전하게 저장하고 신속하게 접근할 수 있는 솔루션이 필요하였습니다. 이에 A

dev-records.tistory.com

 

'AWS' 카테고리의 다른 글

AWS Glue란?  (0) 2023.07.05
AWS S3 - 클라우드 스토리지 서비스  (0) 2023.06.18
Amazon Web Services(AWS) 소개  (0) 2023.06.15

댓글