쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

2단계: 테이블 생성

포커스 모드
2단계: 테이블 생성 - Amazon Athena

이제 데이터베이스가 생겼으므로 이를 위한 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 위치를 지정합니다. 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에게 Regex SerDe 라이브러리와, 사용자가 지정한 정규 표현식을 사용하도록 지시합니다.

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

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

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

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

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

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

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

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

    참고

    다음 예제에 사용된 정규식은 athena-examples Amazon S3 위치에서 공개적으로 사용 가능한 샘플 CloudFront 로그 데이터와 함께 작동하도록 설계되었으며 설명을 위한 용도로만 제공되었습니다. 표준 및 실시간 CloudFront 로그 파일을 모두 쿼리하는 최신 정규 표현식에 대한 자세한 내용은 Amazon CloudFront 로그 쿼리 섹션을 참조하세요.

    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 데이터베이스의 테이블 목록에 나타납니다.

프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.