본문 바로가기
[AWS]/AWS 기타

[AWS] Glue를 사용하여 AWS Athena에서 S3 데이터 쿼리

by METAVERSE STORY 2022. 9. 16.
반응형
728x170

AWS Athena란 무언인가?

 

Amazon Athena

Amazon Athena는 표준 SQL을 사용해 Amazon S3에 저장된 데이터를 간편하게 분석할 수 있는 대화식 쿼리 서비스입니다. Athena는 서버리스 서비스이므로 관리할 인프라가 없으며 실행한 쿼리에 대해서만 비용을 지불하면 됩니다.

Athena는 사용이 쉽습니다. Amazon S3에 저장된 데이터를 가리키고 스키마를 정의한 후 표준 SQL을 사용하여 쿼리를 시작하기만 하면 됩니다. 그러면 대부분 결과가 수 초 이내에 제공됩니다. Athena에서는 데이터 분석을 준비하기 위한 복잡한 ETL 작업이 필요 없습니다. 따라서 SQL을 다룰 수 있는 사람은 누구나 신속하게 대규모 데이터 세트를 분석할 수 있습니다.

Athena는 AWS Glue 데이터 카탈로그와 즉시 통합되므로, 다양한 서비스에 걸쳐 통합된 메타데이터 리포지토리를 생성하고, 데이터 원본을 크롤링하여 스키마를 검색하고 카탈로그를 신규 및 수정된 테이블 정의와 파티션 정의로 채우며, 스키마 버전을 관리할 수 있습니다.

 

 

AWS Glue란 무엇인가?

AWS Glue는 완전 관리형 추출, 변환 및 로드(ETL) 서비스로, 효율적인 비용으로 간단하게 여러 데이터 스토어 및 데이터 스트림 간에 원하는 데이터를 분류, 정리, 보강, 이동합니다. AWS Glue는 AWS Glue Data Catalog로 알려진 중앙 메타데이터 리포지토리, 자동으로 Python 및 Scala 코드를 생성하는 ETL 엔진, 그리고 종속성 확인, 작업 모니터링 및 재시도를 관리하는 유연한 스케줄러로 구성됩니다. AWS Glue는 서버리스이므로 설정하거나 관리할 인프라가 없습니다.

EC2가 인스턴스(컴퓨팅)을 모아놓은 것이고, 람다가 함수들을 모아놓은 것이라면, Glue는 데이터들을 모아서 관리한다고 보면 된다.

 

 

 

 

[실습]

1. S3 생성

 

데이터를 담아 둘 Amazon S3를 먼저 생성 해야 한다. 

버킷 만들기를 클릭한다. 

 

 

 

 

이름을 설정한 후 나머지는 기본값으로 세팅한 후 버킷을 만들어 준다. 

이 안에는 csv 형식의 파일을 집어 넣을 것이다. 

 

그 후 csv 파일을 하나 넣어 주었다.

 

원래는 공공데이터의 csv를 넣어주려고 했지만 한글로 넣으면 Glue에서 글자가 깨지는 현상을 확인하여 영어로 된 csv를 활용 하였다. 

 

 

 

 

2. Glue 생성

 

그 후 Glue Studio에 들어와서 크롤러를 선택한다.

 

 

 

 

 

그 후 새로운 크롤러를 만들 것이므로 Create crawlers를 클릭한다. 크롤러는 스키마 생성을 자동화 할 수 있게 도와준다. 

 

 

 

 

먼저 크롤러 이름을 설정한 후에 Next를 눌러준다.

 

 

 

 

현재 우리는 데이터가 Glue Table에 매핑되어 있지 않으므로 Not yet을 선택한다.

그 후 Data sources에 Add a data source를 클릭해준다.

 

 

 

 

그 후 Data source를 S3로 지정해 주고 위에서 만든 athena-example-yang 버킷을 선택 해 준다.

 

 

 

 

그 후 현재 파일이 하나 있긴 하지만 모든 서브 폴더를 크롤할 수 있게 해놓는다. 

그리고 맨 밑은 제외 하는 패턴으로 logs 폴더 및에 모든 개체는 탐색되지 않는다는 것이다. 

 

 

 

설정한 후 방금 설정한 S3를 선택하고 Next를 눌러준다. 

 

 

 

그 다음 IAM 역할을 지정해 줘야 한다. 

우리는 따로 만든 것이 없으므로 여기서 Create new IAM role을 클릭 해 준다. 

 

 

 

IAM 역할 이름을 지정해 준 후 Create를 눌러 생성을 해 준다.

 

 

 

 

그 다음 Next를 눌러준다.

 

 

 

그 후 Target database를 생성해야한다. 나는 현재 생성 해 놓은게 없으므로 Add database를 누른다. 

 

 

 

그 후 이름을 지정하고 database를 생성 해 준다. 

 

 

 

Crawler schedule은 On demand로 해 주고 방금 만든 Target database를 선택해 준다.

 

 

 

그 후 Next를 눌러준다. 

 

 

 

 

완성이 되면 크롤러가 하나 추가 된 것을 볼 수 있다. 

 

 

 

그 후 크롤러를 클릭한 이후 Run을 돌려 준다. 

 

 

그 후 Cloudwatch 로그 그룹을 통해서 크롤러가 어떻게 돌아갔는지 로그를 확인할 수 있다.

 

 

그 후 다시 Glue로 돌아와서 Tables를 확인 해 보니 하나 생성 된 것을 확인할 수 있었다.

들어가서 Schema를 확인 해 보았다.

 

 

 

실제 csv 파일과 비교해 보았다. 소문자로 바뀌었지만 잘 나온 것을 확인할 수 있었다. 

 

 

 

또한 Actions에서 View Properties를 해 보았다. 

 

 

 

그러자 이러한 json 형식으로 보이는 것을 확인할 수 있었다. 

 

 

 

3. Athena 생성

 

그 다음 Athena에 들어온 후 쿼리 편집기 탐색을 클릭한다. 

 

 

 

그러면 이런식으로 하면이 뜨게 된다.

왼쪽을 보면 데이터 원본 및 데이터베이스가 우리가 위에서 Glue에서 진행했던 내용을 확인할 수 있따.

그 후 밑 테이블을 확인하니 위에서 확인했던 스키마를 확인할 수 있었다. 

 

 

 

그 후 테이블의 점 세개 부분을 클릭하여 테이블 미리보기를 클릭한다. 

 

 

 

하지만 에러가 하나 뜨게 된다.

이는 출력 위치가 제공되지 않았다는 것이다. 그러므로 S3로 가서 출력시킬 폴더를 하나 생성하고 그 위치를 지정해 주어야 한다. 

 

 

 

그 후 S3로 돌아와서 위처럼 폴더 만들기를 통해서 output이라는 폴더를 생성 해 주었다. 

 

 

다시 Athena로 돌아와서 설정을 클릭한다. 설정을 클릭한 후 관리를 클릭해 보면 

 

 

위처럼 방금 만들어준 output 폴더를 지정한 후 저장을 클릭한다. 

 

 

그 후 쿼리를 다시 돌려보면 이렇게 결과가 출력이 된다. 

위에서 제한을 10개로 두었기 때문에 10개의 정보를 확인할 수 있었다. 

 

 

이렇듯 AWS Glue의 데이터 카탈로그와 Athena를 사용하면 AWS Glue를 통해 Athena에서 쿼리할 데이터베이스와 테이블(스키마)을 만들거나, Athena를 사용하여 스키마를 만든 후 AWS Glue 및 관련 서비스에 이용이 가능하다. 

 

출처

 

https://www.youtube.com/watch?v=8VOf1PUFE0I&ab_channel=AjayWadhara 

 

반응형
그리드형

댓글