에어플로우에서는 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에서 사용법
- 오퍼레이터 파라미터 입력하는 곳에 중괄호 '{ }' 를 2개 이용하면 Airflow에서 기본적으로 제공하는 변수(ex: 수행 날짜, DAG_ID) 들을 치환된 값으로 입력할 수 있습니다.
- https://airflow.apache.org/docs/apache-airflow/stable/templates-ref.html
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
이처럼, 특정 operators 패키지에 들어가 해당 operator에서 어떤 parameter가 template을 지원하는지 확인해야 합니다.
이상으로 Jinja 템플릿에 대해 배워봤습니다.
Jinja Template은 모든 오퍼레이터, 모든 파라미터에 쓸 수 있는 것이 아니고,
오퍼레이터 내에서도 특정한 파라미터들만 진자 템플릿을 쓸 수 있다는 것을 알았습니다!
'컴퓨터 공부 > 💿 Airflow' 카테고리의 다른 글
[Airflow] Airflow의 날짜 개념 (0) | 2023.08.27 |
---|---|
[Airflow] Bash 오퍼레이터 with Template (0) | 2023.08.26 |
[Airflow] Python Operator에 op_kwargs로 변수 할당하기 (0) | 2023.08.25 |
[Airflow] Python Operator에 op_args로 변수 할당하기 (0) | 2023.08.25 |
[Airflow] 파이썬 함수 파라미터 이해 (0) | 2023.08.24 |