시작하기 - Amazon Athena

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

시작하기

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

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

사전 조건

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

  • 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에서 쿼리 결과 위치를 설정하려면 Edit Settings(설정 편집)를 선택합니다.

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

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

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

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

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

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

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

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

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

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

2단계: 테이블 생성

이제 데이터베이스가 생겼으므로 이를 위한 Athena 테이블을 만들 수 있습니다. 생성하는 테이블은 현재 위치의 Amazon CloudFront 로그 데이터 예제를 기반으로 합니다. 이 s3://athena-examples-myregion/cloudfront/plaintext/ 위치에서는 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 위치를 지정합니다. Athena는 폴더 내 모든 파일을 스캔할 것으로 예상하기 때문에 이 LOCATION 조항은 특정 파일이 아닌 Amazon S3 폴더 위치를 지정합니다.

이 예제에는 곧 설명하겠지만 중요한 제한 사항이 있으므로 아직 사용하지 마십시오.

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 DELIMITEDAthena는 호출된 기본 라이브러리를 사용하여 데이터를 LazySimpleSerDe파싱하는 실제 작업을 수행한다는 것을 의미합니다. 또한 이 예제에서는 필드를 탭(FIELDS TERMINATED BY '\t')으로 구분하고 파일의 각 레코드가 줄 바꿈 문자(LINES TERMINATED BY '\n)로 끝나도록 지정합니다. 마지막으로 LOCATION 절은 읽어 올 실제 데이터가 위치한 Amazon S3의 경로를 지정합니다.

자체 탭이나 쉼표로 구분된 데이터가 있는 경우 필드에 중첩된 정보가 포함되지 않는 한 방금 제시한 예제와 같은 CREATE TABLE 명령문을 사용할 수 있습니다. 하지만 이와 같은 열에 다른 구분기호를 사용하는 중첩 정보가 포함되어 ClientInfo 있는 경우에는 다른 접근 방식이 필요합니다.

필드에서 데이터 추출 ClientInfo

샘플 데이터를 살펴보면 최종 필드의 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 명령문은 탭을 필드 구분 기호로 지정하기 때문에 ClientInfo 필드 내의 개별 구성 요소를 별도의 열로 나눌 수 없습니다. 따라서 새 CREATE TABLE 명령문이 필요합니다.

ClientInfo필드 내 값으로 열을 만들려면 정규식 그룹이 포함된 정규 표현식 (regex) 을 사용할 수 있습니다. 지정한 정규 표현식 그룹은 별도의 테이블 열이 됩니다. CREATE TABLE 문에 정규 표현식을 사용하려면 다음과 같은 구문을 사용합니다. 이 구문은 Athena에게 정규식 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 사용에 대한 자세한 내용은 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 콘솔에서 최근 쿼리 뷰 및 다운로드.
  6. 하나 이상의 최근 SQL 쿼리 문자열을 CSV 파일로 다운로드하려면 Download CSV(CSV 다운로드)를 선택합니다.

    
                        최근 쿼리 문자열을 CSV 파일로 다운로드.

    자세한 설명은 쿼리 결과, 최근 쿼리, 출력 파일 작업 섹션을 참조하세요.

쿼리 저장

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

키보드 바로 가기 및 미리 입력하기 제안

Athena 쿼리 편집기에서는 쿼리 실행, 쿼리 형식 지정, 줄 작업, 찾기 및 바꾸기와 같은 작업을 위한 다양한 키보드 바로 가기를 제공합니다. 자세한 내용과 전체 바로 가기 목록은 AWS 빅 데이터 블로그Improve productivity by using keyboard shortcuts in Amazon Athena query editor를 참조하세요.

Athena 쿼리 편집기에서는 더 빠른 쿼리 작성 경험을 위해 코드 미리 입력하기 제안을 지원합니다. 정확성과 효율성이 향상된 SQL 쿼리를 작성할 수 있도록 다음 기능을 제공합니다.

  • 입력할 때 키워드, 로컬 변수, 스니펫 및 카탈로그 항목에 대한 제안이 실시간으로 표시됩니다.

  • 데이터베이스 이름이나 테이블 이름을 입력하고 점을 입력하면 편집기에 선택할 수 있는 테이블 또는 열 목록이 편리하게 표시됩니다.

  • 스니펫 제안에 마우스를 대면 스니펫의 구문 및 사용법에 대한 간략한 개요가 시놉시스에 표시됩니다.

  • 코드 가독성을 높이기 위해 키워드와 강조 표시 규칙도 Trino 및 Hive의 최신 구문에 맞게 업데이트되었습니다.

이 기능은 기본적으로 활성화되어 있습니다. 이 기능을 활성화하거나 비활성화하려면 쿼리 편집기 창의 오른쪽 하단에 있는 코드 편집기 기본 설정(톱니 아이콘)을 사용합니다.

다른 데이터 소스에 연결

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