데브코스 데이터 엔지니어링 WEEK6 WIL(1)

2024. 11. 1. 16:42·Data Engineer/데브코스

관계형 데이터베이스

관계형 데이터베이스란? 구조화된 데이터를 저장하는데 사용되는 storage

비구조화된 데이터는 저장하기 힘듬

 

데이터 분석 위한 데이터들은 대부분 구조화가 된 데이터들이다. 

관계형 데이터베이스에 저장된 데이터를 가지고 질의 하거나 조작하는데 사용되는 언어가 sql이다. 

따라서 데이터가 구조화되었다고 가정만 된다면 데이터 분석과 관련해서 가장좋은 기술 옵션이 된다. 

datawarehouse나 spark모두 sql을 지원

 

관게형 데이터베이스는 데이터를 테이블로 나누어서 저장한다.

- 각 테이블에는 이름이 있다.

- 열에는 이름과 타입이 존재한다.

- table이 column들로 형태가 정의가 되면 record들이 행으로 존재한다. 

table의 schema: table을 구성하는 column들의 이름이 뭐고 타입이 뭔지, shcema에 맞춰서 record들을 추가할 수 있다. 

 

하지만 세상의 많은 데이터들은 구조화되어있지 않다.

text data, 이미지, 비디오 같은것들.. 어떤 형태로든 parsing해서 구조를 만들어야한다. 

 

관계형 데이터베이스는 2단계로 구성됨

가장 밑단에는 테이블들 그리고 이 테이블들은 데이터베이스(혹은 스키마)라는 폴더 밑으로 구성

 

대표적 관계형 데이터베이스

백엔드나 프런트엔드가 사용하는 데이터베이스

-> 서비스를 사용하는 사용자 들에 대한 정보, 제품에 대한 정보등을 빠르게 저장 하고 읽어서 서비스를 운영하기 위한 목적

즉 데이터베이스의 사용방향이 다르다. 여기서는 큰데이터를 처리해서 작은데이터로 요약을 하고

다양한 종류의 데이터 분석을 하기 위한 목적으로 sql이 사용된다. 

 

1) 프로덕션 데이터베이스: MySql, PostreSQL

OLTP -> 빠른 속도에 집중. 웹서비스나 모바일 앱에 바로 연동되서 쓰이는 데이터베이스

여기에 부하를 주면 사용자가 오래 기다려야하고 그러면 사용자 방문X

2) 데이터 웨어하우스: Redshift, Snowflake, BigQuery

OLAP-> 처리 데이터 크기에 집중. 데이터 분석 혹은 모델 빌딩등을 위한 데이터 저장.

보통 프로덕션 데이터베이스를 복사해서 데이터 웨어하우스에 저장한다. 이거를 주기적으로 복사해서 데이터 분석하는 사람이 굳이 프로덕션 데이터베이스에 접근하지 않아도 원하는 일을 할 수 있도록 

 

만약 데이터 웨어하우 없이? 필요한 데이터를 뽑으려면 프로덕션 데이터베이스에 SQL을 실행해야하는데 서비스에 연결되어 있는 DB이기 때문에 큰쿼리를 날려서 데이터베이스 느려지면 전체 서비스에 영향을 끼치게 된다. 또한 다양한 쿼리 날리다보면 실수가 있을 수 있다. 

 

차이점

어떤 형태로 Data를 표현(모델링) 할 것인가. Data 표현 방법

1) Star schema 2) Denormalized schema

SatrScemal는 데이터를 논리적으로 나눠서 저장, 필요시 조인 연산. 스토리지의 낭비가 덜하고 업데이트 쉽다.  

Data awarehouse는 Production DB를 그대로 복사하기 때문에 수장할 일이 별로 없다. 또한 크기에 제약이 없음

따라서 Denormalized schema더 유리

매출에 대한 정보들을 여러 Table로 나누기보다는 한 Table에

 

SQL

관계형 데이터베이스를 프로그래밍 하는 언어가 SQL

 

단 SQL만으로 비구조화된 데이터를 다루지 못한다. 

데이터가 nested 된 형태는 (Field 안에 Field가 존재하는 그런 Nested된 structure)지원하지 않는다. 

->비구조화된 데이터를 다루는데 Spark, Hadoop 같은 분산 컴퓨팅 환경이 필요해진다. 

 

Query의 종류

DDL:테이블 정의를 위한, table의 이름이 뭐고 column들 정의(schema 정의)

DML: 테이블들에 있는 데이터 조작/질의를 위한 

 

데이터 웨어하우스 중심의 SQL을 배워보자.

 

데이터 웨어하우스

회사에 필요한 모든 데이터를 저장한다. 

복사한 뒤 마음 놓고 쿼리를 날릴 수 있다. 프로덕션 데이터베이스외에도 여러가지 복사.(마케팅한 정보, 불만사항등등)

data는 한곳에 모여있고 많은 것들이 모여있을 때 힘을 발휘

RedShift는 고정비용 옵션이고 GoogleCloud의 BigQuery, Snowflake는 가변비용 옵션이다.(쓴만큼 돈을 낸다.)

 

빠른것보다는 원하는 데이터 분석을 수행할 수 있는가

외부에 존재하는 데이터를 읽어다가 데이터 웨어하우스로 저장하는 것을 ETL혹은 데이터 파이프라인이라 한다. 

Extract는 외부 존재하는 데이터를 추출 

Transform은 내가 원하는 포맷으로 

Load는 데이터 웨어하우스에 저장하는 마지막 스탭

 

 ETL은 코드이다. 시스템이 발전하면 비구조화된 데이터들을 processing하기 위해

spark같은 대용량 분산처리 시스템이 데이터 인프라로 일부로 추가된다. 

 

Redshift

1) 데이터 레코드는 레코드 별로 저장하는 것이 아닌 특정 컬럼별 저장할 수 있다. 예를 들어, 테이블에 컬럼 A, B, C가 있으면, 컬럼 A의 값들을 각 레코드에 따라 연속적으로 저장하고, 컬럼 압축이 가능하고 추가나 삭제가 빠르게 가능

2) redshift는 벌크 업데이트 지원한다. INSERT 문으로 동시에 추가할 수 있는 데이터 수에 제약이 있고

datawarehouse는 굉장히 많은 data를 외부에서 읽었다가 내부 database에 저장해야하는 경우에는 insert statement를 써가지고 record별로 update한다는 것이 좋지 않다. 

레코드가 들어있는 파일을 Webstorage인 S3로 복사하고 redshift로 일괄복사하는 커맨드가 존재한다. (redshift는 COPY라는 command) record를 csv나 json에 넣고 webstorage(S3)에 복사하고 copy를 해서 redshift로 일괄 복사

3) 다른 데이터 웨어하우스처럼 primary key uniqueness를 보장하지 않는다. 

그 이유는 레코드가 추가될때마다 값이 유일한지 체크해야되는데 그러면 성능 저하가...

그러면 어떻게 data uniqueness를 보장? data enginerr가 해줘야한다. 즉 redshift는 보장 안해주기 때문에 개발자가 

4) Reedshift는 Postgresql 8.x와 SQL이 호환됨(모든 기능을 지원하지는 않음)

PostgreSQL를 접근할 수 있는 client나 programming library가 있으면 똑같은 것을 사용해서 Redshift에 접근할 수 있다. 

 

 

Redshift를 하나 런치 했다면 3개의 폴더를 만든다. 

raw_data는 외부에서 읽어온 data를 그대로 저장하는 폴더 (data engineer가 관리, etl을 구현해서 어디선가 읽어온것을 넣는다.)

analytics raw_data를 denormalized를 하던 요약을 하던 더 쓰기 편하게 테이블을 만들어서 analytics밑에

adhoc은 내 나름대로 table을 만들어서 개발을 하거나 test할 일이 있을경우 

이 schema를 만들기 위해서는 redshift의 admin 권한을 가지고 있는 사람만

redshift는 구글 colab을 통해 access할 수 있다. Postgresql 8.x와 호환되는 모든 툴이나 언어를 통해 접근할 수도 있다. 

sql workbench, python이라면 psycopg2모듈

시각화 대시보드 툴로 Looker, Tableau 같은걸로 redshift와 연결해서 차트를 만들고 대시보드를 만들수 있다.  

'Data Engineer > 데브코스' 카테고리의 다른 글

데브코스 데이터 엔지니어링 WEEK10 WIL(2)  (0) 2024.11.19
데브코스 데이터 엔지니어링 WEEK10 WIL(1)  (0) 2024.11.19
데브코스 데이터 엔지니어링 WEEK8 WIL(2)  (0) 2024.11.19
데브코스 데이터 엔지니어링 WEEK8 WIL(1)  (0) 2024.11.07
데브코스 데이터 엔지니어링 WEEK6 WIL(2)  (0) 2024.11.07
'Data Engineer/데브코스' 카테고리의 다른 글
  • 데브코스 데이터 엔지니어링 WEEK10 WIL(1)
  • 데브코스 데이터 엔지니어링 WEEK8 WIL(2)
  • 데브코스 데이터 엔지니어링 WEEK8 WIL(1)
  • 데브코스 데이터 엔지니어링 WEEK6 WIL(2)
dev.di
dev.di
devdi 님의 블로그 입니다.
  • dev.di
    개발 블로그
    dev.di
  • 전체
    오늘
    어제
    • 분류 전체보기 (28)
      • Algorithm (9)
        • Basics (9)
      • AWS (0)
        • AWS (0)
        • SAA (0)
      • Computer Science (1)
        • OS 벼락치기 (1)
        • DB 벼락치기 (0)
      • Data Engineer (8)
        • Airflow (0)
        • Data Warehouse (0)
        • Kafka (0)
        • Spark (0)
        • 데브코스 (8)
      • Docker (0)
      • Interviews (1)
      • Network (2)
        • Physical Layer (0)
        • Data Link Layer (0)
      • OOP (3)
        • GoF (3)
      • Python (4)
        • Django (3)
        • Scraping (1)
      • Software Engineering (0)
      • Spring (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    데이터 웨어하우스
    sql
    포트포워딩
    IPv4
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
dev.di
데브코스 데이터 엔지니어링 WEEK6 WIL(1)
상단으로

티스토리툴바