s3 : 모든 데이터들을 저장할 데이터 레이크같은 역할
준비물 : 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)"}
1. AWS 로그인 후, AWS S3 실행
2. 버킷 만들기 실행, 버킷 이름은 test-wootag
3. test-wootag에 data폴더 생성!
4. data폴더에 만들어 놓은 Log Json파일 업로드!
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파일에 맞게 설정해주면 된다. 참고로 테이블에서 보고 싶은 칼럼만 설정해도 된다. 모든 칼럼을 넣을 필요는 없다.
다 설정했으면 테이블 만들기를 누르자.
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인 것들만 출력하는 코드
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"