시작하기 - Amazon Athena

시작하기

이 자습서에서는 Amazon Athena를 이용한 데이터 쿼리를 안내합니다. Amazon Simple Storage Service에 저장된 샘플 데이터를 기반으로 테이블을 만들고 테이블을 쿼리한 다음 쿼리 결과를 확인할 것입니다.

이 자습서는 라이브 리소스를 사용하므로 실행하는 쿼리에 대한 요금이 부과됩니다. 이 자습서에서 사용하는 위치의 샘플 데이터에 대해서는 요금이 청구되지 않지만, Amazon S3에 자체 데이터 파일을 업로드하면 요금이 발생합니다.

사전 조건

  • 아직 계정에 가입하지 않았다면 설정에서 가입하세요.

  • Athena에 사용하는 것과 같은 AWS 리전(예: 미국 서부(오레곤) 및 계정을 사용하여 Amazon S3에 버킷을 생성해 Athena 쿼리 결과를 보관하세요.

1단계: 데이터베이스 생성

먼저 Athena에서 데이터베이스를 생성해야 합니다.

Athena 데이터베이스 생성

  1. https://console.aws.amazon.com/athena/에서 Athena 콘솔을 엽니다.

  2. 현재 AWS 리전의 Athena 콘솔을 처음 방문하는 경우 쿼리 편집기 검색(Explore the query editor)을 선택해 쿼리 편집기를 엽니다. 그렇지 않으면 Athena가 쿼리 편집기에서 열립니다.

  3. Amazon S3에서 쿼리 결과 위치를 설정하려면 보기 설정(View Settings)을 선택합니다.

    
                        보기 설정(View Settings)을 선택합니다.
  4. 설정(Settings) 탭에서 관리(Manage)를 선택합니다.

    
                        관리를 선택합니다.
  5. 설정 관리(Manage settings)에서 다음 중 하나를 수행합니다.

    • 쿼리 결과 위치(Location of query result) 상자에서 Amazon S3에서 쿼리 결과를 위해 생성한 버킷의 경로를 입력합니다. 경로 앞에 s3://를 붙입니다.

    • S3 검색(Browse S3) 아이콘을 선택하고 현재 리전에서 생성한 Amazon S3 버킷을 선택한 다음 선택(Choose)을 선택합니다.

    
                        Athena의 쿼리 결과를 수신하려는 Amazon S3의 위치를 지정합니다.
  6. 저장(Save)을 선택합니다.

  7. 편집기(Editor)를 선택하여 쿼리 편집기로 전환합니다.

    
                        편집기(Editor)를 선택합니다.
  8. 탐색 창의 오른쪽에서 Athena 쿼리 편집기를 사용하여 쿼리와 문을 입력하고 실행할 수 있습니다.

    
                        Athena 콘솔의 쿼리 편집기.
  9. mydatabase라는 데이터베이스를 생성하려면 다음 CREATE DATABASE 문을 입력합니다.

    CREATE DATABASE mydatabase
  10. 실행(Run)을 선택하거나 Ctrl+ENTER를 누릅니다.

  11. 왼쪽의 데이터베이스(Database) 목록에서 mydatabase를 선택하면 현재 데이터베이스로 만들 수 있습니다.

    
                        생성한 데이터베이스를 선택합니다.

2단계: 테이블 생성

이제 데이터베이스가 생겼으므로 이를 위한 Athena 테이블을 만들 수 있습니다. 생성하는 테이블은 s3://athena-examples-myregion/cloudfront/plaintext/ 위치에 있는 샘플 Amazon CloudFront 로그 데이터를 기반으로 합니다. 여기서 myregion은 자신의 현재 AWS 리전입니다.

샘플 로그 데이터는 탭으로 구분된 값(TSV) 형식입니다. 즉, 필드를 구분하는 구분 기호로 탭 문자가 사용됩니다. 데이터는 다음 예제와 같습니다. 읽기 쉽도록 발췌 부분의 탭은 공백으로 변환되었고 마지막 필드는 줄였습니다.

2014-07-05 20:00:09 DFW3 4260 10.0.0.15 GET eabcd12345678.cloudfront.net /test-image-1.jpeg 200 - Mozilla/5.0[...] 2014-07-05 20:00:09 DFW3 4252 10.0.0.15 GET eabcd12345678.cloudfront.net /test-image-2.jpeg 200 - Mozilla/5.0[...] 2014-07-05 20:00:10 AMS1 4261 10.0.0.15 GET eabcd12345678.cloudfront.net /test-image-3.jpeg 200 - Mozilla/5.0[...]

Athena가 이 데이터를 읽도록 하려면 다음과 같이 CREATE EXTERNAL TABLE 문을 실행합니다. 테이블을 생성하는 문으로 데이터에 매핑되는 열을 정의하고, 데이터의 구분 방식을 지정하고, 샘플 데이터가 포함되는 Amazon S3 위치를 지정합니다.

참고

LOCATION 절에 대해 특정 파일이 아니라 Amazon S3 폴더 위치를 지정합니다. Athena가 지정한 폴더에 있는 파일을 모두 검색합니다.

CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs ( `Date` DATE, Time STRING, Location STRING, Bytes INT, RequestIP STRING, Method STRING, Host STRING, Uri STRING, Status INT, Referrer STRING, ClientInfo STRING ) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' LINES TERMINATED BY '\n' LOCATION 's3://athena-examples-my-region/cloudfront/plaintext/';

이 예제에서는 cloudfront_logs라는 테이블을 생성하고 각 필드의 이름과 데이터 유형을 지정합니다. 이러한 필드는 테이블의 열이 됩니다. date예약된 단어이므로 백틱(`) 문자로 이스케이프합니다. ROW FORMAT DELIMITED는 Athena가 LazySimpleSerDe라는 기본 라이브러리를 사용해 실제 데이터 구문 분석 작업을 수행할 것임을 의미합니다. 또한 이 예제에서는 필드를 탭(FIELDS TERMINATED BY '\t')으로 구분하고 파일의 각 레코드가 줄 바꿈 문자(LINES TERMINATED BY '\n)로 끝나도록 지정합니다. 마지막으로 LOCATION 절은 읽어 올 실제 데이터가 위치한 Amazon S3의 경로를 지정합니다. 탭 또는 쉼표로 구분된 자체 데이터가 있는 경우 CREATE TABLE 문을 다음과 같이 사용할 수 있습니다.

샘플 데이터로 돌아와서, 여기에 최종 필드 ClientInfo의 전체 예시가 있습니다.

Mozilla/5.0%20(Android;%20U;%20Windows%20NT%205.1;%20en-US;%20rv:1.9.0.9)%20Gecko/2009040821%20IE/3.0.9

보시다시피 이 필드는 다중 값입니다. CREATE TABLE 문에서 필드 구분 기호로 탭을 지정하면 이 특정 필드 내의 개별 구성 요소를 별도의 열로 나눌 수 없습니다. 필드 내부의 값에서 열을 만들기 위해 regex 그룹을 포함한 정규 표현식(regex)을 사용할 수 있습니다. 지정한 정규 표현식 그룹은 별도의 테이블 열이 됩니다. CREATE TABLE 문에 정규 표현식을 사용하려면 다음과 같은 구문을 사용합니다. 이 구문은 Athena에게 Regex SerDe 라이브러리와, 사용자가 지정한 정규 표현식을 사용하도록 지시합니다.

ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ("input.regex" = "regular_expression")

정규 표현식은 복잡한 CSV 또는 TSV 데이터에서 테이블을 만드는 데 유용하지만 작성하고 관리하기가 어려울 수 있습니다. 다행히 JSON, Parquet, ORC와 같은 형식을 사용할 수 있는 다른 라이브러리들이 있습니다. 자세한 내용은 지원되는 SerDes 및 데이터 형식 단원을 참조하세요.

이제 Athena 쿼리 편집기에서 테이블을 생성할 준비가 되었습니다. 귀하를 위해 CREATE TABLE 문과 정규식이 제공되어 있습니다.

Athena에서 테이블 생성

  1. 탐색 창에서 데이터베이스(Database)에 대해 mydatabase가 선택되어 있는지 확인합니다.

  2. 쿼리 편집기에서 더 많은 공간을 확보하려면 화살표 아이콘을 선택하여 탐색 창을 축소합니다.

    
                        화살표를 선택하여 탐색 창을 축소합니다.
  3. 새로운 쿼리를 생성하려면 쿼리 편집기에서 더하기(+) 기호를 선택합니다. 한 번에 최대 10개의 쿼리 탭을 열 수 있습니다.

    
                        더하기 아이콘을 선택하여 새 쿼리 생성.
  4. 하나 이상의 쿼리 탭을 닫으려면 더하기 기호 옆에 있는 화살표를 선택합니다. 모든 탭을 한 번에 닫으려면 화살표를 선택한 다음 모든 탭 닫기(Close all tabs)를 선택합니다.

    
                        화살표 아이콘을 선택하여 하나 이상의 쿼리 탭을 닫습니다.
  5. 쿼리 창에 다음 CREATE EXTERNAL TABLE 문을 입력합니다. 이 정규 표현식은 로그 데이터에 있는 ClientInfo 필드의 운영 체제, 브라우저 및 브라우저 버전 정보를 구분합니다.

    CREATE EXTERNAL TABLE IF NOT EXISTS cloudfront_logs ( `Date` DATE, Time STRING, Location STRING, Bytes INT, RequestIP STRING, Method STRING, Host STRING, Uri STRING, Status INT, Referrer STRING, os STRING, Browser STRING, BrowserVersion STRING ) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "^(?!#)([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+([^ ]+)\\s+[^\(]+[\(]([^\;]+).*\%20([^\/]+)[\/](.*)$" ) LOCATION 's3://athena-examples-myregion/cloudfront/plaintext/';
  6. LOCATION 문에서 myregion을 현재 사용 중인 AWS 리전(예: us-west-1)으로 바꿉니다.

  7. 실행(Run)을 선택합니다.

    cloudfront_logs 테이블이 생성되어 mydatabase 데이터베이스의 테이블 목록에 나타납니다.

3단계: 데이터 쿼리

이제 Amazon S3의 데이터를 기반으로 Athena에서 생성한 cloudfront_logs 테이블이 있으므로 테이블에서 SQL 쿼리를 실행하고 Athena에서 결과를 볼 수 있습니다. Athena에서의 SQL 사용에 대한 자세한 내용은 Amazon Athena에 대한 SQL 참조 섹션을 참조하세요.

쿼리를 실행하려면

  1. 더하기(+) 기호를 선택해 새 쿼리 탭을 열고 쿼리 창에 다음 SQL 문을 입력합니다.

    SELECT os, COUNT(*) count FROM cloudfront_logs WHERE date BETWEEN date '2014-07-05' AND date '2014-08-05' GROUP BY os
  2. 실행(Run)을 선택합니다.

    결과는 다음과 같이 나타납니다.

    
                        Athena 콘솔에서 쿼리 결과 보기.
  3. 쿼리의 결과를 .csv 파일에 저장하려면 결과 다운로드(Download results)를 선택합니다.

    
                        CSV 형식으로 쿼리 결과 다운로드.
  4. 이전 쿼리를 보거나 실행하려면 최신 쿼리(Recent queries) 탭을 선택합니다.

    
                        최근 쿼리(Recent queries)를 선택하여 이전 쿼리를 봅니다.
  5. 최신 쿼리(Recent queries) 탭에서 이전 쿼리 결과를 다운로드하려면 쿼리를 선택한 다음 결과 다운로드(Download results)를 선택합니다. 쿼리는 45일 동안 보존됩니다.

    
                        Athena 콘솔에서 최근 쿼리 뷰 및 다운로드.

    자세한 정보는 쿼리 결과, 최근 쿼리, 출력 파일 작업을 참조하십시오.

쿼리 저장

쿼리 편집기에서 만들거나 편집한 쿼리를 이름으로 저장할 수 있습니다. Athena는 이러한 쿼리를 저장된 쿼리(Saved queries) 탭에 저장합니다. 이 저장된 쿼리(Saved queries)를 통해 저장한 쿼리를 불러오거나, 실행하거나, 이름을 바꾸거나, 삭제할 수 있습니다. 자세한 정보는 저장된 쿼리 사용을 참조하십시오.

다른 데이터 소스에 연결

이 자습서에서는 CSV 형식의 Amazon S3의 데이터 소스를 사용했습니다. AWS Glue의 Athena 사용 방법에 대한 자세한 내용은 AWS Glue를 사용하여 Amazon S3의 데이터 원본에 연결 단원을 참조하세요. ODBC 및 JDBC 드라이버, 외부 Hive 메타스토어, Athena 데이터 소스 커넥터를 사용하여 다양한 데이터 소스에 Athena를 연결할 수도 있습니다. 자세한 내용은 데이터 원본에 연결 단원을 참조하세요.