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 |