일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- delta lake
- 카프카
- Schema Registry
- 컬럼 기반
- 데이터
- Data Warehouse
- airflow
- 델타레이크
- 데이터 엔지니어
- kafka
- 대용량 처리
- 에어플로우
- s3
- Data Engineer
- 스파크 스트리밍
- spark
- spark streaming
- docker
- kafka rest api
- 데이터 웨어하우스
- 스파크
- Redshift
- Parquet
- Zookeeper
- Data engineering
- AWS
- 데이터 엔지니어링
- MySQL
- 레드시프트
- 카프카 구축
- Today
- Total
데이터 엔지니어 기술 블로그
[Airflow] 실행 날짜(execution date) 쉽게 이해하기 본문
개요
에어플로우에서는 execution date 라는 개념이 있다. 과거에 실행하지 못한 작업을 그 시간대에 맞춰서 실행할 때 유용하다.
하지만 사용하면서도 계속 헷갈리는데 이번에 정리해보려고 한다.
Execution Date란?
통계청에서 Parameter로 가져오는 날짜를 지정해야 하는 API가 있다고 생각해본다. 이 API를 사용하여 데이터를 수집하는 스크립트를 만들었다. 크론탭으로 이 스크립트를 매일 아침에 실행하게 하였는데 만약 3일 전(2021-06-14) 통계청 서버의 오류로 데이터를 수집하지 못한 것을 알아챘다면 스크립트의 매개변수 중 날짜를 2021-06-14로 설정한 후 다시 실행시켜야 한다.
Airflow에는 Execution Date라는 개념이 있어서 매일 데이터를 수집하도록(@daily) 했다면 그 당시의 스크립트를 따로 매개변수 설정 없이 재실행하기만 하면 그 당시의 시간으로 스크립트를 실행해준다.
상황별 실행 결과
■ 1번
설정
schedule: 0 3 * * *
실제 실행 날짜: 6월 18일 04시(UTC)
start_date: days_ago(3) -> 2021-06-15T00:00:00+00:00
실행
14일 03시(시작 시간보다 이전) / 15일 03시 / 16일 03시 / 17일 03시 / 18일 03시(현재 시간 + 실행 간격보다 이전)
■ 2번
설정
schedule: 0 3 * * *
실제 실행 날짜: 6월 21일 04시(UTC)
start_date: datetime.datetime(2021, 6, 15, 12) -> 2021-06-15T12:00:00+00:00
실행
15일 03시(시작 시간보다 이전) / 16일 03시 / 17일 03시 / 18일 03시 / 19일 03시 / 20일 03시 / 21일 30시(현재 시간 + 실행 간격보다 이전)
■ 3번
설정
schedule: 0 3 * * *
실제 실행 날짜: 6월 21일 04시(UTC)
start_date: datetime.datetime(2021, 6, 15, 2) -> 2021-06-15T02:00:00+00:00
실행
14일 03시(시작 시간보다 이전) / 15일 03시 / 16일 03시 / 17일 03시 / 18일 03시 / 19일 03시 / 20일 03시 / 21일 03시(현재 시간 + 실행 간격보다 이전)
■ 4번
설정
schedule: */35 * * * *
실제 실행 날짜: 6월 21일 03시 41분(UTC)
start_date: datetime.datetime(2021, 6, 21, 2) -> 2021-06-21T02:00:00+00:00
실행
20일 01시 35분(시작 시간보다 이전) / 21일 02시 00분 / 21일 02시 35분 / 21일 03시 00분 / 21일 03시 35분(현재시간 + 실행 간격보다 이전)
결론
1. start_date는 execution_date를 기준으로 하는 시작 시간이다.
2. execution_date는 스케줄이 정해진 시간이 되었을 때 보다 이전 시간이 execution_date가 된다.
3. */35로 했을 때 35분 이후에는 00분부터 다시 시작한다.
'데이터 엔지니어링' 카테고리의 다른 글
[🧙Kafka] S3 Sink Connector: 카프카 S3와 연동하기 (0) | 2021.07.09 |
---|---|
[Airflow] Task 알아보기: Operator, Sensor, TaskFlow (0) | 2021.06.21 |
[Airflow] 에어플로우 시작하기: 개념 및 설치 (7) | 2021.06.16 |
[Airflow] 에어플로우 작업 실패시 Slack으로 메세지 보내는 방법 (0) | 2021.06.14 |
[MYSQL] Docker MYSQL 로그에서 "mbind: Operation not permitted" 이슈 해결방법 (0) | 2021.06.07 |