Airflow Study9-Jinja 템플릿

박성현·2024년 6월 2일
0

Airflow

목록 보기
16/28
post-thumbnail

Jinja 템플릿이란 ?

Airflow에서 Jinja 템플릿은 DAG (Directed Acyclic Graph) 정의 파일에서 동적으로 값을 생성하거나 파일 경로, SQL 쿼리 등을 템플릿화하는 데 사용되는 강력한 기능입니다. Jinja는 Python에서 널리 사용되는 텍스트 템플릿 엔진으로, Airflow는 이를 활용하여 더욱 유연하고 재사용 가능한 DAG를 작성할 수 있도록 지원합니다.

주요 기능:

  • 변수 치환:
    DAG 실행 시점에 결정되는 값을 템플릿 내에 삽입할 수 있습니다. 예를 들어, 실행 날짜, 환경 변수, Airflow
    매크로 등을 사용하여 파일 경로나 쿼리를 동적으로 생성할 수 있습니다.
  • 제어 흐름:
    조건문 (if/else)이나 반복문 (for)을 사용하여 템플릿 내에서 로직을 구현할 수 있습니다.
  • 필터:
    텍스트 형식 지정, 날짜 변환 등 다양한 필터를 제공하여 데이터를 원하는 형태로 가공할 수 있습니다.
  • 매크로:
    자주 사용되는 템플릿 코드를 매크로로 정의하여 재사용성을 높일 수 있습니다.
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만 바꿔서 재활용 가능 

Airflow에서 사용법

오퍼레이터 파라미터 입력시 중괄호 {} 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 오퍼레이터 with Template

bash operator의 templated_fileds:

template_fields: Sequence[str]= ('bash_command', 'env', 'cwd')[source]

data_interval_start, data_interval_end , ds

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

profile
다소Good한 데이터 엔지니어

0개의 댓글