[AWS] S3에 있는 Log Json파일 Athena로 살펴보기

jake·2022년 11월 7일
0

AWS

목록 보기
1/3

s3 : 모든 데이터들을 저장할 데이터 레이크같은 역할

  • 버킷 : bucket, 객체가 파일이라면 버킷은 연관된 객체들을 그룹핑한 최상위 디렉토리, globally unique name이기 때문에 이름 지을 때 중복을 조심해야 한다.

준비물 : AWS 계정, Log Json 파일
실행한 Log Json 파일 예시 :

{"time": "2022-01-13 02:59:26.000000", "remote_ip": "93.180.71.3", "remote_user": "-", "request": "GET /downloads/product_1 HTTP/1.1", "response": 304, "bytes": 0, "referrer": "-", "agent": "Debian APT-HTTP/1.3 (0.8.16~exp12ubuntu10.21)"}

S3 버킷 만들기


1. AWS 로그인 후, AWS S3 실행

2. 버킷 만들기 실행, 버킷 이름은 test-wootag


3. test-wootag에 data폴더 생성!


4. data폴더에 만들어 놓은 Log Json파일 업로드!

Athena Table 만들기


1. Athena 실행 후, 쿼리 편집기 탐색 클릭

2. 테이블이 들어갈 데이터베이스를 먼저 만들어야 한다.

CREATE DATABASE myDataBase

위의 명령어를 편집기에 적고 실행하자. "myDataBase"가 데이터베이스 이름이다.


3. 옆에 데이터베이스 창을 보면 myDataBase가 생겼을 것이다. 데이터베이스를 myDataBase로 바꾸자.

4. 데이터베이스안에 들어갈 테이블을 만들자. 생성 버튼을 누르면 S3 버킷 데이터 생성이라는 버튼이 있을 것이다. 버튼을 클릭하고 테이블 이름을 작성 하자. 테이블 이름은 new_table

아까 만들어 놓은 S3 test-wootag 버킷 안에 있는 파일을 불러오기 위함이다.

5. 입력 데이터의 위치를 설정해야 한다. Log Json파일은 S3의 test-wootag/data에 있다. 따라서 Log Json파일의 상위 디렉터리인 data까지 경로를 설정해주면 된다.
테이블 형식이 중요한데 테이블 유형은 Apache Hive, 작업 형식은 JSON이다.
(Log Json파일은 말 그대로 JSON형식이니깐)

6. Log Json파일에 있는 칼럼을 설정해야 한다.

{"time": "2022-01-13 02:59:26.000000", "remote_ip": "93.180.71.3", "remote_user": "-", "request": "GET /downloads/product_1 HTTP/1.1", "response": 304, "bytes": 0, "referrer": "-", "agent": "Debian APT-HTTP/1.3 (0.8.16~exp12ubuntu10.21)"}

위의 코드처럼 time 칼럼은 timestamp, remote_ip 칼럼은 string, bytes 칼럼은 int 형식이므로 갖고 있는 JSON파일에 맞게 설정해주면 된다. 참고로 테이블에서 보고 싶은 칼럼만 설정해도 된다. 모든 칼럼을 넣을 필요는 없다.

다 설정했으면 테이블 만들기를 누르자.

테이블 살펴보기

  1. 아테나로 돌아오면 지금까지 한 행위들이 코드로 변한되어 작성되어 있다. 사실 지금까지 한 작업을 아테나에서 코드 타이핑으로 똑같이 할 수 있다.
SELECT * FROM "mydatabase"."new_table" limit 10;

이제 테이블을 보면 만들었던 new_table이 보인다. 클릭 후 미리보기를 하면 자동으로 위의 명령어가 만들어질 것이다. myDataBase에서 모든 칼럼이 포함된 10개의 열을 가져온다는 뜻이다. 실행하자

2. 실행하면 Log Json에서 봤던 데이터들이 나열된다. limit의 제한을 바꾸면 더 많이 혹은 더 적게 출력할 수 있다.

3.

SELECT agent FROM "mydatabase"."new_table" limit 10;

위의 명령어는 mydatabase에서 agent 칼럼만 10개 가져오는 명령어다. 실행하면 아까와 다르게 agent 칼럼만 출력된다.


4.

SELECT * FROM "mydatabase"."new_table" WHERE response=200;

mydatabase라는 데이터베이스의 new_table이란 테이블에서 response가 200인 것들만 출력하는 코드

  1. 이전에 만들었던 s3 폴더에 ctas폴더를 만들어 보자.
    이제 ctas폴더에 new_table의 time, remote_ip만 추출하여 parquet형식으로 저장할 것이다.
CREATE TABLE new_table1 WITH (external_location='s3://test-wootag/ctas/', format='PARQUET',parquet_compression='SNAPPY')
AS SELECT time, remote_ip FROM "mydatabase"."new_table"

0개의 댓글