ssung_데이터 엔지니어링/9주차_Airflow

Airflow_(4)

ssungcohol 2023. 12. 14. 17:03

Primary Key Uniqueness

  • 테이블에서 하나의 레코드를 유일하게 지칭할 수 있는 필드(들)
     - 일반적으로는 하나의 필드만을 사용 but, 다수의 필드를 사용 가능
     - CREATE TABLE SQL 문 사용시 지정
  • 관계형 데이터베이스 시스템이 PK 값이 중복 존재하는 것을 막아줌
  • 빅데이터 기반의 데이터 웨어하우스들은 PK를 지키지 않음
     - 이를 보장해야하는 것은 데이터 인력의 책임
     - PK를 보장하는데 메모리와 시간이 더 들어 대용량 데이터 적재의 걸림돌

PK를 유지하는 방법

  • 임시 테이블 (스테이징 테이블)을 만들고 현재 모든 레코드를 임시 테이블에 복사
  • 임시 테이블에 새로운 데이터 소스에서 읽어들인 레코드들을 복사
     - 중복 레코드 존재 가능
  • 중복 레코드를 걸러주는 SQL 작성
     - 최신 레코드를 우선 순위로 선택
     - ROW_NUMBER를 이용해 PK로 partition을 잡고 적당한 필드(timestamp 필드)로 ordering (역순 DESC)을 수행해 pk별로 하나의 레코드를 잡음
  • 복사한 SQL을 바탕으로 원본 테이블로 복사
     - 원본 테이블 레코드삭제
     - 임시 테이블을 원본 테이블로 복사

UPSERT

  • PK를 기준으로 존재하는 레코드라면 새로운 정보로 수정
  • 존재하지 않는 레코드라면 새 레코드로 적재
  • 데이터 웨어하우스마다 UPSERT를 효율적으로 해주는 문법을 지원

Backfill

  • 실패한 데이터 파이프 라인을 재실행 혹은 읽어온 데이터들의 문제로 다시 다 읽어와야하는 경우를 의미
  • Backfill 해결은 Incremental Update에서 복잡해짐
     - Full Refresh에서는 간단 (다시 실행하면 됨)
  • 실패한 파이프라인의 재실행이 용이할수록 디자인이 잘 된 Airflow

Backfill 과 관련된 Airflow 변수들

  • Start_date - DAG가 처음 실행되는 날짜가 아니라 DAG가 처음 읽어와야하는 데이터의 날짜/시간.
     (실제 첫 실행 날짜는 start_date + DAG의 실행주기)
  • execution_date - DAG가 읽어와야하는 데이터의 날짜와 시간
  • catchup - DAG가 처음 활성화 된 시점이 start_date보다 미래라면 그 사이에 실행이 안 된 것들을 어떻게 할 것인지 결정해주는 파라미터. True가 기본 값이고 이 경우, 실행이 안 된 것들을 모두 따라잡으려고 함. False는 실행 안 된 것들을 무시
  • end_date - 많이 필요하지 않은 값으로 날짜 범위에 대해 Backfill을 하는 경우에만 필요
728x90

'ssung_데이터 엔지니어링 > 9주차_Airflow' 카테고리의 다른 글

Airflow_(3)  (0) 2023.12.13
Airflow_(2)  (0) 2023.12.12
Airflow_(1)  (0) 2023.12.12