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
대부분 날짜를 다룰때 많이 사용되는데 중괄호 안에 어떤 값이 들어가냐에 따라 출력 Type이 다르다. 그에 대한 정보는 마찬가지로 아래 공식문서에 잘 나와 있다.
https://airflow.apache.org/docs/apache-airflow/stable/templates-ref.html
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_command와 env이다. 공식 문서를 살펴보면 Bash_operators는 저 두 파라미터에만 JINJA를 사용할 수 있다고 잘 나와있다.
아무튼 이제 출력값을 보면 다음과 같이 형식에 맞게 출력된 것을 알 수 있다.
task1
task2