대화형식의 SQL 쿼리 엔진
1. Introduction to Amazon Athena
Amazon Athena
•
서버리스 분석 쿼리 엔진
◦
S3에 저장된 데이터 기반으로 처리
•
아래 3가지 키워드 기억
◦
분산
◦
SQL Query Engine
◦
Amazon S3
Why Amazon Athena?
•
데이저 저장 공간과 쿼리 엔진 분리
•
서버리스
•
쿼리 수행 만큼만 비용 지불
•
데이터를 읽어 올때 스키마를 사용한다.!!
◦
데이터를 적재할 때 스키마를 고려할 필요가 없다.
Simple Pricing
•
S3 데이터를 스캔할 때 비용 발생
•
+ S3 GET, LIST, PUT 비용
Run standard SQL
•
ANSI SQL 지원
◦
Fast Performance for Large Data Sets
•
대용량의 데이터에 대해 빠른 쿼리 수행
•
Federated Query 지원
◦
다른 종류의 DB를 Athena와 연동해서 쿼리 가능
How to handle Large Data Sets?
•
RDS
•
RDS에서 성능을 늘리려면…
◦
Scale-up, Scale-out(Master 1ea)
Decouple storage from compute
•
Athena
•
Amazon Athena에서 성능을 늘리려면…
◦
Scale-out 전략
◦
Query Engine, Storage 분리
▪
Multi Master(writer)
•
Computer - Storage Interface Layer - Storage
Distributed Data Processsing System
2. Athena Design Patterns
1: Ad-hoc use-case
•
데이터에서 SQL로 분석할때…
2: SaaS use-case
•
SaaS형태로 데이터 분석 서비스 제공
•
실시간성 (RDS) + 배치(Athena)
3: ETL and query use-case
•
Data 변형 후 적재 등에 Query기반의 Athena 사용
4: Data science exploration and feature engineering
Comparison of SQL Processing engines
•
Amazon EMR/Glue
•
Amazon EMR(Presto)
•
Amazon Athena
•
Amazon Redshift
◦
Data Warehouse
◦
Data Store: Redshift Node상
3. Athena in Action
Create External Tables
•
S3에 저장된 데이터에 대한 스키마를 먼저 정의해야 한다.
◦
Create External Tables
•
Athena에서 테이블 삭제시 S3 상에 데이터 삭제 X
•
읽을 때 스키마 정의
Navigate to ‘Saved Queries’ to get DDL
•
“Saved Queries’ 항목 참고해서 Athena Query 작성.
Create External Table using DDL(예)
•
비행 정보 관련 테이블…
New Flights Parquet Table Created(예)
•
SELECT * FROM XXX LIMITS 100;
Save Query Results
•
실행 결과는 Default로는 위 형식의 S3 Bucket를 생성하고 해당 버킷내 저장됨.
How to execute query?
•
광고 데이터(예)
Data Schema & Location
•
Schema + Location
3.1 Tuning and Design Patterns
Data Formats and SerDes
•
Apache web logs
◦
Regular Expression 으로 구분 가능한 형식
Data Formats in Create Table
Column Data Types
Example
•
ROW FORMAT serde..
◦
각 파일에 행의 값을 Serialize / Deserialize 하기 위해 설정
3.2 Partitions
Partitions
•
Partition = 폴더로 생각
Example
•
PARTITIONED BY..
Partitions in Create Table
How does partioning work?
•
Partition 했을 때 장점은..
◦
위 비행 정보 예를 보면.. 2000년 이전 폴더(파티션)은 접근하지 않는다.
◦
비용 절감
Using Partition Projection
•
where조건에 파티션이 들어가면 특정 파티션만 찾아서 빠르게 접근 가능하다.
Data Catalog (Meta Store) - Schema, Location
•
Data Catalog(Meta Store)에 데이터 위치, 파티션이 저장된다.
•
Partitions X
◦
전체 데이터 가져온 후 필터링
•
Partitions O
◦
데이터 가져올 때 파티션 적용
Partition by Running MSCK Repair
•
아예 없거나 잘못된듯 하여 전체 파티션을 다 맞추겠다 → MSCK
Partition by Manually Adding Partitions
Data Catalog(Meta Store) - Schema, Location
•
파티션을 Data Catalog에 추가하더라도 S3에 데이터가 없더라도 오류 발생하지 않는다.
•
실 사용시..
◦
S3 데이터 적재와 무관하게 Data Catalog에 파티션을 미리 생성해 놓는다.
•
S3에는 데이터가 적재되었으나 Data Catalog에 해당 파티션이 없는 경우 데이터를 읽을 때 문제 발생(읽지 못함.)
Convert to Columnar Formats - Parquet/ORC
•
Data Format이 Athena Query 성능에 영향을 준다.
◦
Columnar Format으로 변경 (BY Hive / Spark)
Different workloads - OLTP vs. OLAP
•
데이터 분석할 때 OLTP vs. OLAP 으로 나눠볼 수 있다.
•
OLTP
◦
RDB에서 처리하는 트랜잭션
◦
온라인 트랜잭션 처리
◦
하나의 행에 있는 모든 데이터를 모두 사용하는 경우가 많다.
•
OLAP
◦
통계 계산
◦
하나의 행에서 특정 컬럼 몇개를 사용하는 경우가 많다.
Row-wise vs. Columnar
•
Row-wise(OLTP)
◦
전체 행에 대해서 주로 데이터를 처리
•
Columnar(OLAP)
◦
특정 컬럼 몇개를 선택해서 통계를 낸다.
◦
컬럼 단위로 묶어 놓는게 빠르게 처리 가능하다.
◦
컬럼 단위로 묶는 경우 중복 데이터가 많기 때문에 압축률이 높다
▪
예> Col C(성별) 인 경우 값은 남자 / 여자..
→ Athena는 OLAP 성 처리를 주로 하기 때문에 데이터가 Columnar로 저장되는 것이 좋다.
3.3 Optimize and Secure
Best Practices
•
Partition your data
•
Bucket your data
◦
데이터를 버킷팅한다. = 파티셔닝과 유사
•
Compress and split files
◦
컬럼 형태로 데이터 저장. 압축. 잘 나누자
•
Optimize File Sizes
◦
파일 사이즈를 적절한 크기로..
▪
파일 단위로 Workload가 분배가 된다. 하나의 파일이 크다고 해서 쪼개지지 않고 전달된다.
Best Practices Continued
Access Control for Athena
3.4 Workgroups
Athena Workgroups
•
접근 권한을 구축할 때 Workgroup을 사용한다.
•
Workgroup을 사용하면..
◦
다른 권한
◦
쿼리 메트릭
◦
비용 제어
Workgroups - Workload Isolation
Workgroups - Metric Reporting
Workgroups - Cost Controls
Setting Up Workgroups
•
RDB에서 특정 사용자에게 테이터베이스, 테이블 접근 권한 제어를 하는 것 처럼 사용 가능하다.
Default Workgroup
3.5 Views
View
Create a View
3.6 CTAS
CREATE TABLE AS SELECT (CTAS)
•
ETL 가능
•
특정 테이블에서 특정 컬럼만 뽑아서 새로운 테이블 만들시..
CTAS Example
Use CTAS queries to:
•
특정 컬럼만 뽑아서 저장
•
데이터 형식 변환
•
작은 파일을 큰파일로 변환
Data Processing: ETL vs. ELT
•
ETL
◦
데이터를 변형한 후 타겟에 저장
◦
변환은 타겟 밖에서 진행
•
ELT
◦
타겟에 저장한 후 변환 진행
◦
Athena
3.7 Monitoring & Auditing
Workgroups
CloudTrail
Monitoring Athena Queries with CloudWatch Metrics
Monitoring Athena Queries with CloudWatch Events
•
콘솔은 동기.. SDK 사용 시 비동기로 처리됨.