Airflow 날짜 Template 변수
Airflow는 Airbnb에서 개발 시 ETL 도구로써 개발했기 때문에, Airflow의 날짜 개념을 이해하기 위해서는 '데이터 관점'에서의 날짜를 바라볼 수 있어야 한다.
예를 들어 하루마다 주기적으로 수행되는 일 배치의 워크플로우가 있다고 생각해보자. 이 워크플로우는 배치 실행 일 기준 전 날 00시부터 23시 59분까지의 데이터를 추출하는 task를 가지고 있다.
그렇게 됐을 때, 데이터 관점에서의 시작 일은 배치를 실행하고 있는 오늘이 아닌 어제인 것이다.
(ex. 25일에 task 실행, 데이터는 24일 00:00~24일 23:59 까지의 데이터이므로 data의 시작 일은 25일이 아닌 24일)
이는 Airflow의 Template 변수를 출력해보아도 알 수 있다. 아래 템플릿들은 데이터 관점 기준 시작일을 나타낸다.
- data_interval_start
- dag_run.logical_date
- ds (yyyy-mm-dd 형식 출력)
- ts (타임스탬프)
그리고 아래 템플릿은 배치가 실행되었거나 실행되고 있는, 종료일을 나타낸다.
- data_interval_end
모든 templates 변수 PythonOperator로 출력해보기
from airflow import DAG
import pendulum
from airflow.decorators import task
with DAG(
dag_id = 'dags_python_show_templates',
schedule = "30 9 * * *", # daily
start_date = pendulum.datetime(2024, 7, 10, tz="Asia/Seoul"),
catchup = True, # 7월 10일부터 현재 날짜까지를 모두 수행
tags=["practice"]
) as dag:
@task(task_id = 'python_task')
def show_templates(**kwargs):
from pprint import pprint
pprint(kwargs)
show_templates()
kwargs 딕셔너리에 따로 삽입을 하지 않은 채 kwargs 딕셔너리를 출력해보는 함수를 만들어서 실행시키는 DAG을 만들어보았다. 또한 catchup=True로 설정하여 7월 10일부터 현재날짜까지 모두 소급하여 워크플로우를 실행하도록 했다.
그리고 서버에 올려 DAG을 실행 시킨 뒤 소급 적용된 날짜 중 하루인 7월 18일의 log를 확인해보았다.
'data_interval_end': DateTime(2024, 7, 18, 0, 30, 0, tzinfo=Timezone('UTC')),
'data_interval_start': DateTime(2024, 7, 17, 0, 30, 0, tzinfo=Timezone('UTC')),
'ds': '2024-07-17',
'ds_nodash': '20240717',
위와 같이 7월 18일(9시 30분 실행)의 로그 데이터를 살펴본 결과, start 시간이 7월 17일 0시 30분, end 시간이 7월 18일 0시 30분으로 출력되었다. (UTC 기준으로 우리 나라 시간보다 9시간 느리다.) 위 데이터 관점의 시간 개념과 일치한다.
'Minding's Programming > Airflow' 카테고리의 다른 글
[Airflow/Xcom] Airflow에서 Xcom 사용해보기 (0) | 2024.07.23 |
---|---|
[Airflow/Macros] Airflow에서 macros(매크로) 사용해보기 (3) | 2024.07.23 |
[Python/Jinja/Airflow] Jinja 템플릿과 Airflow에서의 사용방법 (2) | 2024.07.22 |
[Airflow] Python Operator의 op_args, op_kwargs (1) | 2024.07.22 |
[Python] 파이썬 함수 파라미터 *args와 **kwargs (0) | 2024.07.22 |