Amazon Athena는 표준 SQL을 사용하여 Amazon S3에 있는 데이터를 직접 간편하게 분석할 수 있는 대화형 쿼리 서비스입니다. Athena는 S3에 저장된 비정형, 반정형 및 정형 데이터를 분석하는데 도움을 주며 인프라를 관리할 필요 없이 S3 데이터에 대해 대화형 쿼리를 쉽게 실행할 수 있습니다. AWS Glue Data Catalog 및 다른 AWS 서비스들과 통합되는 것 또한 장점입니다. 오늘은 S3에 있는 데이터로 Athena에서 Table을 생성하고, SQL로 몇 가지 쿼리를 실행해봅시다.
1. Table 생성
Amazon Athena 콘솔로 접속합니다.
Create > S3 bucket data를 누릅니다.
Table의 이름을 작성합니다.
새로운 Database를 생성하거나, Glue의 기존 데이터베이스를 선택합니다.
데이터가 저장된 S3 경로를 선택합니다. 반드시 베이스 경로여야 합니다.
- s3://demo-s3/logs/1.csv -> s3://demo-s3/logs/
- s3://demo-s3/logs/year=2023/month=10/day=12/ -> s3://demo-s3/logs/
데이터의 포맷을 설정합니다. 저는 로그가 '.parquet'으로 저장되어 Apache Parquet 파일 포맷을 사용했습니다.
이제 Table의 컬럼들을 정의합니다. 컬럼마다 이름과 타입을 지정해주면 됩니다.
이어서 파티션에 이용되는 컬럼도 정의해줍니다.
Table을 생성하는 쿼리가 완성되었습니다. Create table을 누르면 이 쿼리가 실행됩니다.
Table 생성이 성공적으로 완료되었습니다.
2. 여러 쿼리 실행
Table 옵션에서 Preview Table을 누르면 상위 10개의 데이터를 조회할 수 있습니다. 이때, 다음 쿼리가 실행됩니다.
SELECT * FROM "(database)"."(table)" limit 10;
-- 예시
SELECT * FROM "skills_db"."skills_log" limit 10;
그러나 현재 아무 데이터도 나오지 않습니다. Table을 잘못 생성한 것일까요?
아직 파티션을 로드하지 않았기 때문에 데이터를 인식하지 못 한 것입니다. Table 옵션에서 Load partitions를 누릅니다. 이때, 다음 쿼리가 실행됩니다.
MSCK REPAIR TABLE `(table)`;
-- 예시
MSCK REPAIR TABLE `skills_log`;
등록되지 않은 파티션을 찾아 로드해준 것을 볼 수 있습니다.
그러나 Hive와 호환되지 않는 파티션의 경우 MSCK를 통한 파티션 로드가 불가능합니다.
이럴 때는 ALTER TABLE ADD PARTITION 쿼리를 통해 수동적으로 S3 경로마다 파티션을 로드해줘야 합니다.
ALTER TABLE table ADD
PARTITION (column1 = value1, column2 = value2, ...)
LOCATION 'S3 Path';
-- 예시
ALTER TABLE skills_log ADD
PARTITION (year = 2023, month = 10, day = 12, hour = 21)
LOCATION 's3://skills-web-arco/log/2023/10/12/21/';
쿼리를 실행한 후, Table의 모든 파티션을 나열하는 SHOW PARTITIONS 쿼리를 실행하면 파티션이 등록된 것을 볼 수 있습니다.
SHOW PARTITIONS table;
-- 예시
SHOW PARTITIONS skills_log;
파티션 로드가 완료된 후, 다시 Preview Table을 누르면 데이터들이 성공적으로 조회된 것을 볼 수 있습니다.
이제 SQL을 사용하여 각종 쿼리를 실행할 수 있습니다. 다음은 ERROR level의 데이터만 조회하는 쿼리입니다.
SELECT * FROM skills_log WHERE level = 'ERROR';
오늘의 글은 여기까지입니다. 감사합니다!
'AWS' 카테고리의 다른 글
[AWS] Golang Gin 이미지를 만들어서 ECR에 Push (0) | 2023.10.14 |
---|---|
[AWS] Managed Service for Apache Flink로 스트리밍 데이터 분석 - Studio notebooks (1) (0) | 2023.10.13 |
[AWS] RDS IAM database authentication (0) | 2023.10.11 |
[AWS] Kinesis Agent로 Kinesis Data Stream에 로그 전송 (2) | 2023.10.10 |
[AWS] CloudFront with Lambda Function URL (1) | 2023.10.09 |