Airflow 마스터 클래스 강의 수강, 개인 공부 후 기록합니다.
Data 관점에서의 날짜
이전 글에서 bashoperator에서 template 변수를 사용해봤다.
그때 사용했던 data_interval_start, data_interval_end가 어떤 값을 나타내는지 이해하려면 먼저 airflow에서의 날짜 개념을 이해해야 한다.
DB 테이블이 존재하고 daily ETL 처리를 위한 조회 쿼리가 2023년 2월 25일 0시에 실행된다고 가정할 때, 이 쿼리는 2월 24일 0시 0분 0초 ~ 2월 24일 23시 59분 59초 사이의 데이터를 가져온다.
SELECT NAME, ADDRESS
FROM TBL_REG
WHERE REG_DATE BETWEEN TIMESTAMP('2023-02-24 00:00:00')
AND TIMESTAMP('2023-02-24 23:59:59')
해당 배치는 2월 25일 0시에 돌지만 데이터 관점에서 날짜를 바라보아야 한다. 데이터 관점의 추출 범위 시작점은 2023년 2월 24일, 데이터 관점의 추출 범위 끝점은 2023년 2월 25일이다.
데이터 관점의 시작일 : 2023년 2월 24일
데이터 관점의 종료일 : 2023년 2월 25일
즉, 실제 배치가 도는 일자와 데이터 관점에서의 일자는 다를 수 있다.
Airflow 날짜 Template 변수
Airflow는 airbnb에서 ETL 도구로 개발했기 때문에 데이터 관점에서 날짜를 바라보는 사상이 담겨 있다.
Template reference에서 날짜와 관련된 template 변수를 확인할 수 있다.
이 template 변수들이 어떤 날짜를 나타내는지는 아래와 같다.
배치가 돌고 있는 현재 날짜는 data_interval_end이며, 이전 배치 날짜는 data_interval_start이다.
deprecated인 execution_date, next_execution_date는 2.1버전에서 쓰던 것인데 이름만 봐도 왜 배치가 돌고 있는 현재 날짜가 next_execution_date인지 헷갈리는 문제 등이 있어 쓰지 않게 되었다.
모든 날짜 변수 출력
with DAG(
dag_id="dags_python_show_templates",
schedule="30 9 * * *",
start_date=pendulum.datetime(2023, 12, 1, tz="Asia/Seoul"),
catchup=True, # 12월 1일부터 현재 날짜까지 구간 모두 수행
) as dag:
@task(task_id="python_task")
def show_templates(**kwargs):
from pprint import pprint
pprint(kwargs)
show_templates()
daily 배치이며, catchup을 True로 주었다. task decorator를 사용해 python operator를 생성했으며 show_templates 함수의 매개변수인 kwargs를 출력해본다.
출력된 값들을 보면 data_interval_start, data_interval_end, deprecated인 변수들까지 모두 출력된다.
python 오퍼레이터는 **kwargs에 template 변수들을 자동으로 제공해주므로 이를 이용해 template 변수 관련 작업들을 쉽게 할 수 있다.
dag을 만들 때 배치가 돌고 있는 현재 날짜 data_interval_end 기준으로 작업하는 경우가 많기 때문에 어떤 변수가 어떤 날짜를 나타내는지 이해해야 한다.
'Data > Airflow' 카테고리의 다른 글
Airflow | Python Operator에서 XCom으로 Task 간 데이터 공유 (0) | 2024.03.30 |
---|---|
Airflow | Python Operator에서 Macro 사용 (0) | 2024.03.30 |
Airflow | Bash Operator에서 Macro 사용 (4) | 2024.02.06 |
Airflow | Python Operator에서 Template 변수 사용 (0) | 2024.02.06 |
Airflow | Bash Operator에서 Template 변수 사용 (0) | 2024.02.05 |