ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AWS Athena 기초 (Athena SQL 작업)

    Cloud 기초/AWS 기초 2023. 9. 6. 03:56

     

    (이 글은 AWS Glue 기초 (S3 Data Catalog 생성)(https://kh-archive.tistory.com/27)를 읽은 것을 전제로 작성하였습니다.)

     

    AWS Athena

     

    Glue편에 이어서 AWS Athena에 대해서 알아보겠습니다.

    AWS에서 Athena에 대한 설명을 한줄로 표한 문장을 보면

     

    서버리스 대화형 분석 서비스

     

    라고 되어있습니다.

     

    '서버리스'라는 것은 어딘가에 서버를 띄우고 인프라를 구축해서 사용하는 서비스가 아니라

    그냥 마치 모든 것이 세팅되어 있고 우리는 단순히 쿼리를 날려서 원하는 결과를 얻을 수 있는 

    interactive한 서비스를 제공한다는 의미로 해석할 수 있습니다.

     

    그러면 AWS Athena가 가진 특징을 하나씩 살펴볼까요?

     

    1. Serverless

    2. Pay-per-query

    3. SQL

    4. Integration

    5. Fast

    6. Schema on Read

    7. Security

    8. Formats

    9. Federated Query

    10. AthenaML

     

    우선, Serverless라는 것은 앞서 말했듯이 서버에 인프라를 구축하여 사용하는 서비스가 아니라

    즉시 사용할 수 있는 서비스라는 의미입니다. 그래서 Athena는 서버나 인프라를 구축하는 비용이 전혀 들지 않죠.

    (물론 공짜란 소리는 아닙니다.)

     

    Pay-per-query는 쿼리를 날리는 횟수에 따라 비용을 부과하는 방식이라는 의미인데요.

    앞서 설명한 Serverless의 특징 때문입니다.

     

    SQL은 다른 특별한 Athena를 사용하기 위한 문법이 있는 것이 아닌,

    다른 DB 서비스에서와 마찬가지로 일반적인 SQL문의 문법을 사용한다는 특징입니다.

    그래서 SQL문을 사용할 수 있으면 바로 Athena를 활요할 수 있습니다.

     

    Integration는 AWS의 다른 서비스와 결합하여 활용할 수 있다는 특징인데,

    예를 들어 Quicksight와 같은 AWS data visualization 서비스와 결합하여 사용하거나

    Glue 등의 서비스와 결합하여 사용할 수 있습니다.

     

    Fast는 Athena는 S3에 가장 최적화된 performance를 보여주는 서비스라는 특징입니다.

     

    Schema on Read는 Schema에 대한 정의가 없어도 쿼리를 날릴 수 있다는 특징입니다.

    (하지만, 일반적으로는 Glue 등의 데이터 전처리 서비스 등과 결합하여 Schema 정의 후 사용되는 경우가 많은 것 같습니다.)

     

    Security의 특징은 Athena는 data catalog와 workgroup이라는 개념을 가지고 query 작업을 할 수 있게 하고,

    또한 IAM과 결합하여 데이터에 대한 접근 권한이 있는 대상만 쿼리를 날릴 수 있도록 합니다.

     

    Formats은 다양한 Data 형식을 지원한다는 특징인데요,

    CSV, JSON, ORC, Parquet 등을 지원하고 있습니다.

     

    Federated Query는 관계형 데이터, 비관계형 데이터, Storage에 저장된 object 데이터 등

    DB의 형식에 관계없이 쿼리를 날릴 수 있다는 특징입니다.

     

    마지막으로 AthenaML은 쿼리르 날려 AWS SageMaker 등과 결합한

    머신러닝에도 활용될 수 있다는 특징입니다.

     

    우선 Athena 실습에 앞서 주요한 두 가지 개념을 알아야 하는데요,

    바로 앞에서도 언급된 바가 있는 data catalog와 workgroup입니다.

     

    data catalog는 Glue라는 데이터 전처리 서비스를 이용하여

    DB와 table을 정의하여 쿼리를 관계형 데이터 베이스처럼 정보를 구성하여

    Athena에 공유해주는 서비스입니다.

     

    workgroup은 쿼리를 날리는 대상에 대한 configuration을 정의해주는 서비스인데,

    workgroup을 활용하여 Athena는 쿼리의 결과값을 저장하는 S3에 대한 세팅,

    쿼리를 날릴 수 있는 권한 등에 관한 설정을 할 수 있습니다.

     

    이제 Athena 실습을 진행하고자 하는데요.

    여기서는 Athena를 활용하여 Glue에서 data catalog가 정의된 S3 CSV 데이터에 대해서

    쿼리를 날리는 과정을 살펴보겠습니다.

     

    그 전에 data catalog와 관련한 설정은

    AWS Glue 기초 (S3 Data Catalog 생성)(https://kh-archive.tistory.com/27)를 참고해주세요

     

    서비스 검색 창에 Athena를 검색하여 들어갑니다. 그러면 다음과 같은 Athena 메인 화면이 뜹니다.

     

    Athena Main

     

    여기서 쿼리 편집기 탐색이라 된 부분을 클릭해봅니다.

    그러니까 바로 이런 화면이 떴는데요.

    우리가 AWS Glue 기초 (S3 Data Catalog 생성)(https://kh-archive.tistory.com/27)에서 

    만들었던 데이터베이스가 바로 뜨네요!!

     

    Athena Query Editor

     

     

    Catalog는 default인 AwsDataCatalog로 하고, workgroup 또한 default인 primary로 진행하겠습니다.

    여기서 다른 부분은 설정할 필요가 없지만 우리가 쿼리를 날린 후 그 결과를 저장하는 저장공간은 지정해야하는데요.

    편집기 | 최근쿼리 | 저장된 쿼리 | 설정 이라고 표시된 탭 메뉴에서 설정을 선택합니다.

    그러면 다음 화면이 뜹니다.

     

    Athena Query Result Setting

     

    여기서 관리를 클릭하면 다음 화면으로 넘어갑니다.

     

    Athena Query Result Setting

     

    Athena Query Result SEtting

     

    Query Result를 저장할 S3 bucket을 지정하기 위해 S3 찾아보기를 클릭하면

     

    S3 bucket list for query result

     

    이렇게 이전에 hurricane 파일을 담기 위해 만들었던 S3밖에 안 보이는데요.

    여기서 원래 원칙상은 별도의 S3버킷을 만들던가 버킷 내에 별도의 경로를 만들어서

    분리된 공간에 query result를 저장하는 것이 좋습니다.

     

    하지만 여기선 귀찮으니까 그냥 같은 S3 bucket을 지정해서 진행해봅시다.

    해당 cloudman-sample-bucket-1 버킷을 클릭하고 선택을 누릅니다.

     

    그리고 아래 화면으로 이동하면 저장을 눌러 쿼리 결과를 저장할 버킷을 지정해줍니다.

     

    S3 Setting for Query Result

     

    그리고 다시 Athena의 쿼리편집기 화면으로 돌아갑니다.

    쿼리 편집기의 편집부분에 다음 쿼리를 날려서 결과를 확인해봅시다.

     

    SHOW DATABASES;

     

    그러면 아래 화면처럼 우리가 Glue로 만든 DB이 SELECT문을 통해 잘 읽히는 것을 확인할 수 있습니다.

     

    Querying SHOW DATABASES

     

    자, 이제 우리가 궁금한 것은 우리가 S3에 CSV 파일 형태로 저장한 데이터를 과연 쿼리를 날려서 가져올 수 있는가겠죠?

     

    SELECT * FROM "hurricane-table-01";

     

    을 날려서 결과를 봅시다.

     

    SELECT ALL 결과

     

    이렇게 결과가 잘 나오는 것을 확인할 수 있었습니다.

     

    이렇게 Athena에 대한 기본적인 소개 및 활용을 마치겠습니다.

Designed by Tistory.