데이터 웨어하우스 & 파이프라인

넘어산·2024년 1월 22일
0

TIL

목록 보기
29/37

데이터 레이크

  • 구조화 데이터 + 비구조화 데이터 (로그파일)
  • 보존 기한이 없는 모든 데이터를 원래 형태로 보존

ETL

  • 데이터 레이크와 데이터하우스 바깥에서 안으로 데이터를 가져오는 것

ELT

  • 데이터 레이크와 데이터하우스 안에서 데이터 처리

데이터 소스

  • 프로덕션 데이터베이스의 데이터, 이메일 마케팅 데이터, 세일즈, 이벤트 로그, 크레딧 카드...

Airflow (ETL 스케줄러)

  • 가장 많이 사용하는 프레임 워크
  • 다수의 ETL이 존재할 경우, 이를 스케줄해주고 의존관계를 정의
  • 특정 ETL이 실패하면 에러 메시지를 받고 재실행 기능(Backfill)

데이터 플랫폼 발전 단계

  1. 초기 단계: 데이터 웨어하우스 + ETL
  2. 발전 단계: 데이터 양 증가
    • Spark 빅데이터 처리 시스템 도입
    • 데이터 레이크 도입
      • 데이터 소스 -> 데이터 파이프라인 -> 데이터 웨어하우스
      • 데이터 소스 -> 데이터 파이프라인 -> 데이터 레이크
      • 데이터 레이크 -> 데이터 파이프라인 -> 데이터 웨어하우스, 데이터 크기가 크기 때문에 Spark/Hadoop 도입
  3. 성숙 단계: 데이터 활용 증대
    • ELT 단이 더 중요해지면서 dbt등의 analytics engneering 도입
    • 품질 중요, ML 도입 가속화

데이터 파이프라인

  • 데이터를 소스로부터 목적지로 복사하는 작업
    • 파이썬, 스칼라, sql
  • 대부분의 경우 목적지는 데이터 웨어하우스가 됨
  • 데이터 소스 예: 프로덕션 데이터베이스, 로그 파일, API..
  • 데이터 웨어하우스, 캐시 시스템, 프로덕션 데이터베이스

종류

Raw Data ETL Jobs

  • 외부와 내부 데이터 소스에서 데이터를 읽어다가 적당한 포맷 후 데이터 웨어하우스 로드
  • 데이터 엔지니어가 보통 함

Summary/Report Jobs

  • DW(혹은 DL)로부터 데이터를 읽어 다시 DW에 쓰는 ETL
  • Raw Data를 읽어 일종의 리포트나 써머리 형태의 테이블 만들기

Production Data Jobs

  • DW로부터 데이터를 읽어 다른 Storage로 쓰는 ETL
    • 써머리 정보가 프로덕션 환경에서 성능 이유로 필요한 경우
    • 혹은 머신러닝 모델에서 필요한 피쳐들을 미리 계산해두는 경우

만들 때 고려할 점

Best Practice #1

  • 가능하면 데이터가 작을 경우, 매번 통채로 복사해서 테이블 만들기(Full Refresh)
  • Incremental update만이 가능하다면, 대상 데이터 소스가 갖춰야할 조건들
    • 데이터 소스가 프로덕션 데이터베이스 테이블이라면 다음 필드가 필요
      • created
      • modified
      • deleted
    • 데이터 소스가 API라면 특정 날짜를 기준으로 새로 생성되거나 업데이트된 레코드들을 읽을 수 있어야함

Best Practice #2 - 멱등성

  • 여러번 반복해도 동일한 결과가 나와야함
  • 모두 one atomic action으로 실행이 되어야함

Best Practice #3 - Backfill

  • 실패한 데이터 파이프라인 실패 시 재실행이 쉬어야함

Best Practice #4 - 명확한 입출력과 문서화

  • 누가 요청했는 지 기록으로 남기고 문서화한다.

Best Practice #5 - 테스트

  • 중요 데이터 파이프라인 입출력 체크하기
  • 출력 레코드 수가 몇개인지
  • 써머리 테이블을 만들고, Primary key가 유일무이한지
  • 중복 레코드 체크

0개의 댓글