주제
ETL의 Load에 대해서 배웠다.
분석용, 애플리케이션용 데이터베이스의 특징에 대해 배웠다.
분석을 위한, 또는 애플리케이션 데이터베이스
분석용 데이터베이스와 애플리케이션 데이터베이스는 명확히 구분된다.
분석 데이터베이스
- 복잡한 집계쿼리가 자주 발생하기 때문에 이를 최적화해야한다.
- 온라인 분석처리(OLAP)을 위해 데이터베이스를 최적화한다.
- column-oriented라서 열 단위로 데이터를 저장한다.
- 분석에서는 컬럼의 하위 집합에 대한 쿼리가 대부분이다.
- 행 지향 시스템에서는 각 행에 대해서 사용하지 않는 컬럼을 스킵해야하는 과정이 필요하다.
- 병렬화에 적합하다.
애플리케이션 데이터베이스
- 초당 많은 트랜잭션이 발생하는 것을 최적화해야한다.
- 온라인 트랜잭션(OLTP)를 위해 데이터베이스를 최적화한다.
- Row-oriented라서 레코드 단위로 데이터를 저장한다.
- 소규모 트랜잭션에서 행을 새로 추가하기 쉽다.
대규모 병렬 처리 데이터베이스(MPP databases)
쿼리가 단일 노드에서 요청되면, 하위 작업으로 분할되어 여러 노드에 분산되는 데이터베이스를 말한다.
MPP데이터베이스는 병렬 처리에 적합한 column-oriented 분석 데이터베이스이다.
대표적인 예
- Amazon Redshift
- Azure SQL Data Warehouse
- Google BigQuery
Redshift 예제
AWS S3(파일스토리지서비스)에 파일을쓰고 Redshift에 복사 쿼리를 보낸다.
컬럼 저장 형식을 사용하는 파일에서 로드하는 것을 잘하기 때문에 parquet
을 사용해서 데이터를 parquet으로 작성하는 함수들이 있다.
#Pandas의 to_parquet
df.to_parquet("./s3://path/to/bucket/customer.parquet")
#PySpark의 .write.parquet()
df.write.parquet("./s3://path/to/bucket/customer.parquet")
PostgreSQL 연결 URI를 사용해 Redshift에 연결하고 S3 데이터를 Redshift로 복사할 수 있다.
COPY customer
FROM 's3://path/to/bucket/customer.parquet'
FORMAT as parquet
...
PostgreSQL 데이터베이스로 로드하기
# 데이터 변환
recommendations = transform_find_recommendations(ratings_df)
#PostgreSQL 데이터베이스에 로드
recommendations.to_sql('recommendations',
db_engine,
schema='store',
if_exists='replace')
Uploaded by Notion2Tistory v1.1.0