1. 데이터 파이프라인이란?

DongbinLim·2023년 12월 13일
0

1) ETL vs. ELT

ETL

  • 데이터 웨어하우스 외부 -> 내부
  • 데엔들의 업무

ELT

  • DW 내부 데이터 조작 -> 새로운 데이터 테이블 생성 ( SQL의 CTAS )
  • 데이터 분석가
  • 데이터 레이크 상에서 수행하기도 함
  • dbt 사용( data build tool )

2) Data Lake vs. Data Warehouse

Data Lake

  • Scale이 큰 Storage ( DW의 몇 배 )
  • 구조화 + 비구조화 데이터
  • 보존 기한 없는, raw_data 형태로 보존

Data Warehouse

  • 사용하고 다시 없애는 경우, 보존 기한을 갖는 구조화 데이터
  • BI 툴의 백엔드로 사용(for Looker, Tableau , Superset)
DataData Lake(S3)Data TransformationDW
Data SourcesData in Raw FormatSpark, Athena
사용자 액세스 로그, raw_dataStorage데이터 정돈 후 DW에 적재

3) Data Pipeline

  • 데이터 소스 -> 목적지(DW)로 복사 작업
  • w/ Python, SQL
  • 데이터 소스 :

    Click stream, call data, ads performance data, transactions, sensor data, metadata, production databases, log files, API, stream data (Kafka topic)

데이터 파이프라인 종류

(1) Raw Data ETL Jobs

  • 외부 데이터 to DW (대부분 w/ API)
  • 데이터 전처리 후 DW 로드
    • 처음엔 Python, 규모 커지면 Spark등

(2) Summary / Report Jobs

  • DW to DW (snowflake SQL 작업 생각)
  • 요약 테이블 w/ SQL(CTAS)

(3) Production Data Jobs

  • DW to 외부 Storage
  • for ML
  • Target Storage
    • NoSQL: Cassandra / HBase/DynamoDB
    • RDB : MySQL
    • 캐시 : Redis/Memcache
    • 검색엔진: ElasticSearch

  • 문제: GroupBy로 ratings&students 집계시 부하
  • 해결: 데이터 시스템 내에서 단위 시간 별로 계산 후, MySQL로 푸쉬해서 해결
SELECT 
    c.courseid
    , COUNT(DISTINCT cr.studentid) “수강생수"
    , COUNT(DISTINCT cr.reviewid)“리뷰수"
    , AVG(cr.rating) “평점"
FROM course c
LEFT JOIN course_review cr ON c.courseid = cr.courseid
GROUP BY 1;

Couse에 Course-review Join 통해 DW에서 미리 계산

2. 데이터 파이프라인 만들 때 고려할 점

1) Full Request 우선시

  • Full Request : 데이터 작을 경우, 매번 전체 데이터 복사해서 테이블 생성
  • Incremental Update : 주기적으로 데이터 추가

2) 멱등성(Idempotency) 보장

  • Data Pipeline 실행시, 실패(중복된 데이터 등)하게 되면 깔끔하게 실패해야 함(for Clean, Credible Data) or 다 같이 성공하거나

3) Backfill(재실행) 용이성

  • 로딩에 실패한 과거 데이터 다시 로딩해오는 과정
  • Airflow가 Backfill 용이

4) 데이터 PL 입출력 명시 및 문서화

  • 데이터 사용 유/무를 파악하기 위해, 데이터 요청인 기록 필수( for 저장 공간 확보와, 불필요한 데이터 삭제 )
  • 데이터 카탈로그 : 데이터 간의 사용 및 연관 관계 명시한 문서(데이터의 데이터)
  • 데이터 디스커버리 툴(위 문서의 검색 기능)

5) 미사용 데이터 주기적 삭제

6) 사고시, 사고리포트 작성(Post Mortem)

  • 기술 부채 정도 파악 가능
  • 사고 발생시, 원인 파악과 방지 가능한 Action 구축해야 함

7) Data Unit-test: 입출력 체크

3. 간단한 ETL 작성하기

  • CSV 파일 to Table, 멱등성 보장

0개의 댓글