Airflow에서 Jinja 템플릿은 DAG (Directed Acyclic Graph) 정의 파일에서 동적으로 값을 생성하거나 파일 경로, SQL 쿼리 등을 템플릿화하는 데 사용되는 강력한 기능입니다. Jinja는 Python에서 널리 사용되는 텍스트 템플릿 엔진으로, Airflow는 이를 활용하여 더욱 유연하고 재사용 가능한 DAG를 작성할 수 있도록 지원합니다.
from jinja2 import Template
template = Temlpate('my name is {{name}}')
new_template = template.render(name='pppsh')
print(new_template)
파이썬 기반 웹 프레임워크인 Flask, Django에서 주로 사용 , 참고 : Airflow 웹서버도 Flask기반
( 주로 HTML 템플릿 저장 후 화면에 보여질 때 실제 값으로 변환해서 출력)
SQL 작성시에도 활용 가능
select * from tables where base_dt = {{dat}}
#dat만 바꿔서 재활용 가능
오퍼레이터 파라미터 입력시 중괄호 {} 2개 이용하면
Airflow에서 기본적으로 제공하는 변수들을 치환된 값으로 입력가능
https://airflow.apache.org/docs/apache-airflow/stable/templates-ref.html
모든 오퍼레이터에서 사용가능 한것 은 아님...
아래 공식 홈페이지에 오퍼레이터 별 파라미티터에
templated or templated_fileds 로 표기 된 애들만 사용 가능.
ex) python operator

https://airflow.apache.org/docs/apache-airflow/stable/_api/airflow/operators/index.html
bash operator의 templated_fileds:
template_fields: Sequence[str]= ('bash_command', 'env', 'cwd')[source]
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'
)
[2024-06-02, 00:13:08 UTC] {subprocess.py:86} INFO - Output:
[2024-06-02, 00:13:08 UTC] {subprocess.py:93} INFO - data_interval_end: 2024-06-02 00:10:00+00:00
[2024-06-02, 00:13:09 UTC] {subprocess.py:86} INFO - Output:
[2024-06-02, 00:13:09 UTC] {subprocess.py:93} INFO - 2024-06-01
[2024-06-02, 00:13:09 UTC] {subprocess.py:93} INFO - 2024-06-02