airflow

[Airflow] - JINJA templates

  • -
728x90

1. jinja 템플릿이란?

문서(파일)에서 특정 양식으로 작성된 값을 런타임 시 실제 값을 치환해 주는 처리 엔진이다.

파이썬 언어에서 사용되는 템플릿 엔진이다. 예시 사용법은 아래와 같다.

\

sql에서도 사용 가능하다. 예를 들어 아래 구문을 template로 만들어두고 날짜마다 바꾸고 싶을 때도 사용가능하다.

SELECT * FROM tables WHERE base_dt = {{  }};

 

 

2. Airflow에서 사용법

오퍼레이터 파라미터 입력시 중괄호 {} 2개를 이용하면 Airflow에서 기본적으로 제공하는 변수들을 치환된 값으로 입력할 수 있다. 

다만, airflow에서는 모든 파라미터에 Template 변수 적용이 가능하지 않다. Templates 적용이 가능한 파라미터는 오퍼레이터마다 다른데 어떤 파라미터가 가능한지는 airflow 공식 문서에서 확인 가능하다.

https://airflow.apache.org/docs/apache-airflow/stable/core-concepts/operators.html

 

Operators — Airflow Documentation

 

airflow.apache.org

대부분 날짜를 다룰때 많이 사용되는데 중괄호 안에 어떤 값이 들어가냐에 따라 출력 Type이 다르다. 그에 대한 정보는 마찬가지로 아래 공식문서에 잘 나와 있다. 

https://airflow.apache.org/docs/apache-airflow/stable/templates-ref.html

 

Templates reference — Airflow Documentation

 

airflow.apache.org

 

3. 사용 예시

가장 기본적인 Bash_operators로 보자.

from airflow import DAG
import pendulum
import datetime
from airflow.operators.bash import BashOperator

with DAG(
    dag_id="dags_bash_with_template",
    schedule="10 0 * * *",
    start_date=pendulum.datetime(2023, 3, 1, tz="Asia/Seoul"),
    catchup=False
) as dag:
    bash_t1 = BashOperator(
        task_id = 'bash_t1',
        bash_command='echo "data_interval_end: {{ data_interval_end }}"'
    )

    bash_t2 = BashOperator(
         task_id = 'bash_t2',
         env={
             'START_DATE': '{{ data_interval_start | ds}}',
             'END_DATE': '{{ data_interval_end | ds }}'
         },
         bash_command= 'echo $START_DATE && echo $END_DATE'
    )

    bash_t1 >> bash_t2

위를 보면 jinja template가 사용된 파라미터는 bash_commandenv이다. 공식 문서를 살펴보면 Bash_operators는 저 두 파라미터에만 JINJA를 사용할 수 있다고 잘 나와있다.

 

아무튼 이제 출력값을 보면 다음과 같이 형식에 맞게 출력된 것을 알 수 있다.

task1

task2

 

728x90
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.