이번주 Airflow 학습 4일차에는 마지막 섹션으로 Backfill에 대해 학습하였다.
Backfill의 개념을 알아보며 Airflow의 Execution Date과 StartDate에 대해 설명을 해주셨는데,
이 두 Date 개념이 이해가 안 되어 5번 넘게 뒤로 감기를 반복했다. 😂
예시를 보며 이해하고, 이해한 것을 정리하니까, 현재는 헷갈리진 않다.
다만, 예시를 daily DAG 위주로 봤던터라 다른 사례를 보면 머리가 복잡해지며 답이 떠오르지 않는다.
이는 추후 추가학습으로 진행해야겠다
Backfill
Backfill은 Incremental Update시 이슈임
- 일반적으로 Full Refresh형태가 좋으며, 데이터가 커져서 Full Refresh를 사용하기 힘들 경우엔 Incremental Update로 넘어가는 것이 이상적이다.
- Incremental Update는 효율성은 좋지만 운영/유지보수 난이도 올라감
- 실수 등으로 데이터 빠지면, 다시 재실행 해줘야됨 (Backfill)
Backfill이란?
실패한 데이터 파이프라인을 재실행 혹은 읽어온 데이터들의 문제로 다시 다 읽어와야하는 경우
- Full Refresh의 경우 재실행하면 Backfiil 완료인데, Incremental Update의 경우 Backfill 까다로움
- Airflow는 Backfill을 위해 최적화된 도구
Execution Date 🌟
DAG를 실행하는 날짜임⭐
시스템 변수로 읽어와야하는 데이터의 날짜를 지정
이는 메타 데이터베이스에 기록되며, ETL별로 실행날짜와 결과가 저장됨
- cli : 뒤에 인자로 execution date 입력해서 실행함
- web ui: backfill하기 원하는 실행 기록 네모상자를 누르면 알아서, 해당 DAG 실행의 execution date을 가져와 실행해줌
→ backfill이 쉬워짐
→ 코드 수정이 불필요함
Start Date 🌟
Daily Incremental Update하는 DAG가 있다고 가정하자.
start_date은 데이터를 읽어와야하는 시작 날짜가 됨
동작하는건 start_date 그 다음날부터임
즉 start_date은
DAG의 시작날짜가 아닌 처음 읽어와야하는 데이터의 날짜임 ⭐
start_date와 execution_date, catchup 개념을 꼭 잘 알아두자!
예시 1 🔥
2022-11-07일 부터 데이터 소스를 매일매일 하루치 데이터를 읽어오고 싶다.
이때의 값은 다음과 같음
- start_date : 2022-11-07
- start_date은 처음 읽어와야하는 데이터의 날짜 ⭐
- 처음 동작 날짜는 ? : 2022-11-08에 처음 실행이 됨
- daily dag면 하루치 데이터를 읽어오니까 어제의 날짜가 됨
- execute_date : 2022-11-07
- 2022-11-08일에 처음 실행될때 들어오는 execution_date은 전날인 2022-11-07이 됨.
- 이 execute_date은 우리가 계산할 필요없이 airflow가 알아서 메타데이터에 저장하고 저장된 정보를 가져와서 알려줌
예시 2 🔥
2020-08-10 02:00:00으로 start date이 설정된 Daily Job이 있다. (Catchup True)
지금 시간이 2020-08-13 20:00:00이고 처음으로 해당 Job이 활성화되었다.
이 경우 Job은 몇 번 실행될까?
답: 3번
1. 2020-08-11 02:00:00 → 이때의 Execution Date은 전날인 2020-08-10 02:00:00
2. 2020-08-12 02:00:00 → 이때의 Execution Date은 전날인 2020-08-11 02:00:00
3. 2020-08-13 02:00:00 → 이때의 Execution Date은 전날인 2020-08-12 02:00:00
해설 :
매일 오전 2시에 실행되는 Daily DAG 이고, 처음으로 읽어와야하는 데이터의 날짜가 2020-08-10 02 이니, 그 다음날 오전 2시에 첫 실행된다.
예시 3 🔥
airflow의 Schedule interval이 "0 * * * *"으로 설정된 DAG의 start date이 "2021-02-04 00:00:00"으로 잡혀있다면
이 DAG의 첫 번째 실행 날짜와 시간은 언제인가?
답 : 2021-02-04 01:00:00
해설 : 0 * * * * 은 매시간 0분에 실행되는 DAG이므로, 첫 실행은 첫 읽어와야하는 데이터의 날짜 자정에서 1시간 뒤인 2021-02-04 01:00 가 된다.
🌟 총 정리 🌟
이름 | 설명 |
start_date | 실제 첫 실행 날짜 : start_date + DAG의 실행주기 |
execution_date | DAG가 읽어와야하는 데이터의 날짜와 시간 |
catchup | 디폴트 True. DAG 처음 활성화 시점이 start_date보다 미래라면, 그 사이의 과거 실행들을 어떻게 할지 결정해주는 파라미터 |
end_date | 보통 쓰이진 않음. Backfill을 날짜 범위에 대해 하는 경우에만 필요함 airflow dags backfill -s …. -e …. |
'#️⃣ Data Engineering > Airflow' 카테고리의 다른 글
Airflow 운영과 대안 (0) | 2023.06.22 |
---|---|
Airflow 실습_OLTP에서 OLAP으로 데이터 적재하기 (0) | 2023.06.09 |
Airflow 실습_OpenAPI와 Upsert를 이용한 DAG (0) | 2023.06.08 |
Airflow 실습_기본코드 정리 및 ETL 코드 개선하기 (0) | 2023.06.07 |
Airflow 설치(Docker-compose)와 간단한 실습 (0) | 2023.06.07 |