컴퓨터 공부/💿 Airflow

[Airflow] Jinja 템플릿

letzgorats 2023. 8. 25. 12:13

에어플로우에서는 Jinja 템플릿을 활용하고 있기 때문에, 먼저 Jinja 템플릿에 대해 이해해보도록 하겠습니다.

 

1. Jinja 템플릿

  • 문서(파일)에서 특정 양식으로 작성된 값을 런타임시 실제 값으로 치환해주는 처리 엔진입니다.
  • 템플릿 엔진은 여러 솔루션이 존재하며 그 중 Jinja 템플릿은 파이썬 언어에서 사용하는 엔진입니다.

※ Jinja 라이브러리는 airflow를 설치할 때, 이미 설치가 됩니다.

예시 코드를 살펴봅시다.

from jinja2 import Template

template = Template('my name is {{name}}')
new_template = template.render(name='allu')
print(new_template)	# my name is allu

{{name}}에서 name이라는 값이 'allu' 라는 값으로 치환됩니다.

 

※ 그렇다면, Jinja 템플릿은 어디서 자주 쓰일까요?

▶ 파이썬 기반 웹 프레임워크인 Flask, Django 에서 주로 사용합니다.
(주로, HTML 템플릿 저장 후 화면이 보여질 때, 실제 값으로 변환해서 출력됩니다.)
(HTML은 정적인 파일인데, 어떤 처리 결과에 따라 다르게 보여주고 싶을 때, 템플릿을 하나 만들어 놓고, 백엔드 서버의 처리 결과에 따라서 값을 바꿔서 보여줄 수 있습니다.)

▶ SQL 작성시에도 활용 가능합니다.
(ex) 'SELECT * FROM tables WHERE base_dt = {{ }}' 라는 구문이 있다고 해봅시다. base_dt 값을 추출하고 싶은데, 추출하는 작업이 매일 돌기 때문에, base_dt에 조건을 거는 날짜도 매일마다 바뀌게 하고 싶을 때가 있을 것입니다.
그렇다면, select 구문을 템플릿으로 하나 만들어 놓고, 실행될 때마다 이 필터 조건만 매일마다 바뀌어서 돌게 하면 되는 셈 입니다. 이럴 때, Jinja 템플릿이 쓰입니다!

 

2. Airflow에서 사용법

 

Templates reference — Airflow Documentation

 

airflow.apache.org

Variable Type Description
{{ data_interval_start }} pendulum.DateTime Start of the data interval. Added in version 2.2.
{{ data_interval_end }} pendulum.DateTime End of the data interval. Added in version 2.2.
{{ ds }} str The DAG run’s logical date as YYYY-MM-DD.
Same as {{ dag_run.logical_date | ds }}.
{{ ds_nodash }} str Same as {{ dag_run.logical_date | ds_nodash }}.
{{ ts }} str Same as {{ dag_run.logical_date | ts }}.
Example: 2018-01-01T00:00:00+00:00.
{{ ts_nodash_with_tz }} str Same as {{ dag_run.logical_date | ts_nodash_with_tz }}.
Example: 20180101T000000+0000.
{{ ts_nodash }} str Same as {{ dag_run.logical_date | ts_nodash }}.
Example: 20180101T000000.
... ... ...

해당 링크를 확인하면, airflow에서의 templates 래퍼런스를 찾을 수 있습니다.

예를 들어, {{}} 안에, 'data_interval_start' 라고 넣어주면, dag이 돌아가는 시점, 즉 런타임 시점이 실제 날짜 값으로 바뀌어서 돌아갑니다.

 

※ 그렇다면, 모든 오퍼레이터, 모든 파라미터에 Template 변수 적용이 가능할까요? → NO !

: Airflow 문서에서 어떤 파라미터에 Template 변수 적용이 가능한지 확인할 필요가 있습니다.

https://airflow.apache.org/docs/apache-airflow/stable/_api/airflow/operators/index.html

 

airflow.operators — Airflow Documentation

 

airflow.apache.org

bash operator

이처럼, 특정 operators 패키지에 들어가 해당 operator에서 어떤 parameter가 template을 지원하는지 확인해야 합니다.

python operator
email operator

이상으로 Jinja 템플릿에 대해 배워봤습니다.

Jinja Template은 모든 오퍼레이터, 모든 파라미터에 쓸 수 있는 것이 아니고,

오퍼레이터 내에서도 특정한 파라미터들만 진자 템플릿을 쓸 수 있다는 것을 알았습니다!

반응형