기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
시작하기
이 자습서에서는 Amazon Athena를 이용한 데이터 쿼리를 안내합니다. Amazon Simple Storage Service에 저장된 샘플 데이터를 기반으로 테이블을 만들고 테이블을 쿼리한 다음 쿼리 결과를 확인할 것입니다.
이 자습서는 라이브 리소스를 사용하므로 실행하는 쿼리에 대한 요금이 부과됩니다. 이 자습서에서 사용하는 위치의 샘플 데이터에 대해서는 요금이 청구되지 않지만, Amazon S3에 자체 데이터 파일을 업로드하면 요금이 발생합니다.
사전 조건
-
아직 계정에 가입하지 않았다면 AWS 계정에 가입하세요.
-
Athena에 사용하는 것과 같은 AWS 리전(예: 미국 서부(오레곤) 및 계정을 사용하여 Amazon S3에 버킷을 생성하는 단계에 따라 Athena 쿼리 결과를 보관합니다. 이 버킷을 쿼리 출력 위치로 구성합니다.
1단계: 데이터베이스 생성
먼저 Athena에서 데이터베이스를 생성해야 합니다.
Athena 데이터베이스 생성
https://console.aws.amazon.com/athena/
에서 Athena 콘솔을 엽니다. -
현재 AWS 리전의 Athena 콘솔을 처음 방문하는 경우 쿼리 편집기 검색(Explore the query editor)을 선택해 쿼리 편집기를 엽니다. 그렇지 않으면 Athena가 쿼리 편집기에서 열립니다.
-
Amazon S3에서 쿼리 결과 위치를 설정하려면 Edit Settings(설정 편집)를 선택합니다.
-
설정 관리(Manage settings)에서 다음 중 하나를 수행합니다.
-
쿼리 결과 위치(Location of query result) 상자에서 Amazon S3에서 쿼리 결과를 위해 생성한 버킷의 경로를 입력합니다. 경로 앞에
s3://
를 붙입니다. -
S3 검색(Browse S3) 아이콘을 선택하고 현재 리전에서 생성한 Amazon S3 버킷을 선택한 다음 선택(Choose)을 선택합니다.
-
-
저장을 선택합니다.
-
편집기(Editor)를 선택하여 쿼리 편집기로 전환합니다.
-
탐색 창의 오른쪽에서 Athena 쿼리 편집기를 사용하여 쿼리와 문을 입력하고 실행할 수 있습니다.
-
mydatabase
라는 데이터베이스를 생성하려면 다음 CREATE DATABASE 문을 입력합니다.CREATE DATABASE mydatabase
-
실행(Run)을 선택하거나
Ctrl+ENTER
를 누릅니다. -
왼쪽의 데이터베이스(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 DELIMITED
Athena는 호출된 기본 라이브러리를 사용하여 데이터를 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
필드 내 값으로 열을 만들려면 정규식 그룹이 포함된 정규 표현식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에서 테이블 생성
-
탐색 창에서 데이터베이스(Database)에 대해
mydatabase
가 선택되어 있는지 확인합니다. -
쿼리 편집기에서 더 많은 공간을 확보하려면 화살표 아이콘을 선택하여 탐색 창을 축소합니다.
-
새로운 쿼리를 생성하려면 쿼리 편집기에서 더하기(+) 기호를 선택합니다. 한 번에 최대 10개의 쿼리 탭을 열 수 있습니다.
-
하나 이상의 쿼리 탭을 닫으려면 더하기 기호 옆에 있는 화살표를 선택합니다. 모든 탭을 한 번에 닫으려면 화살표를 선택한 다음 모든 탭 닫기(Close all tabs)를 선택합니다.
-
쿼리 창에 다음
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/'; -
LOCATION
문에서myregion
을 현재 사용 중인 AWS 리전(예:us-west-1
)으로 바꿉니다. -
Run(실행)을 선택합니다.
cloudfront_logs
테이블이 생성되어mydatabase
데이터베이스의 테이블 목록에 나타납니다.
3단계: 데이터 쿼리
이제 Amazon S3의 데이터를 기반으로 Athena에서 생성한 cloudfront_logs
테이블이 있으므로 테이블에서 SQL 쿼리를 실행하고 Athena에서 결과를 볼 수 있습니다. Athena에서의 SQL 사용에 대한 자세한 내용은 Athena에 대한 SQL 참조 섹션을 참조하세요.
쿼리를 실행하려면
-
더하기(+) 기호를 선택해 새 쿼리 탭을 열고 쿼리 창에 다음 SQL 문을 입력합니다.
SELECT os, COUNT(*) count FROM cloudfront_logs WHERE date BETWEEN date '2014-07-05' AND date '2014-08-05' GROUP BY os
-
Run(실행)을 선택합니다.
결과는 다음과 같이 나타납니다.
-
쿼리의 결과를
.csv
파일에 저장하려면 결과 다운로드(Download results)를 선택합니다. -
이전 쿼리를 보거나 실행하려면 최신 쿼리(Recent queries) 탭을 선택합니다.
-
최신 쿼리(Recent queries) 탭에서 이전 쿼리 결과를 다운로드하려면 쿼리를 선택한 다음 결과 다운로드(Download results)를 선택합니다. 쿼리는 45일 동안 보존됩니다.
-
하나 이상의 최근 SQL 쿼리 문자열을 CSV 파일로 다운로드하려면 Download 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를 연결할 수도 있습니다. 자세한 내용은 데이터 원본에 연결 단원을 참조하세요.