-
[Airflow] User_defined_macros를 이용하여 jinja template의 사용자 정의 변수 활용하기데이터 엔지니어링/AirFlow 2023. 2. 12. 13:22반응형
안녕하세요 까치입니다. 오랜만에 Airflow 포스팅을 하게 되었습니다. DAG의 모든 task에서 공통 변수를 활용하는 경우가 많은데 이때 어떻게 해야할지 공부하게 되어 포스팅 하게 되었습니다.
먼저 user_defined_macros라는 속성에 변수를 등록하면 그 당시에 활용하는 DAG안에 공통 변수를 설정 할 수 있습니다. 아래 코드는 완성 코드 입니다. MACROS_VAR에 공통 변수로 활용할 값을 설정하고, DAG안에 user_defined_macros라는 속성에 넣었습니다.
from datetime import datetime, timedelta from airflow import DAG from airflow.operators.bash import BashOperator default_args = { 'owner': 'hsjoo', } # 매크로로 사용할 변수 설정 MACRO_VARS={ "id" : "sampleID", "pw" : 1234, "dataset" : "userDS" } with DAG( dag_id="ex_user_defined_macros", default_args=default_args, start_date=datetime(2022, 4, 30), schedule_interval='@once', # MACRO_VARS 변수 설정 # DAG객체 안에 user_defined_macros를 설정하면 Task에서 JinjaTemplate으로 불러 사용가능하다. user_defined_macros=MACRO_VARS, tags=['test', 'user_defined_macros sample'], ) as dag: task1 = BashOperator( task_id='task1', # jinja template을 이용하여 변수 활용 bash_command="echo '{{id}} and {{pw}} and {{dataset}}'" ) task1
아래 Running Command로 확인 해본 결과 MACRO_VARS에 값이 찍힌 것을 확인 할 수 있습니다.
user_defined_macros라는 속성을 이용해서 사전에 공통 변수를 설정하는 함수를 만들고 처리 후 에 관련 로직을 처리하는 순서로 DAG를 작성하면 될 것 같습니다.
모든 airflow source는 제 github에 있습니다.
반응형'데이터 엔지니어링 > AirFlow' 카테고리의 다른 글
[Airflow] jinja_template을 활용한 날짜 동적 변수 활용 하는 법(동적 datetime, ds변수 UTC안되는 것 해결법) (0) 2022.09.18 [Airflow] hook이란? (hook을 사용하여 mysql to csv 패턴 실습) (0) 2022.09.04 [Airflow] airflow설치 방법(with ubuntu, mysql) (0) 2022.09.04 [Airflow]Catch up, Backfill 알아보기 (0) 2022.09.04 [Airflow] Executor의 종류와 사용가이드라인 알아보기(Sequential, Local, Celery, Kubernetes) (0) 2022.08.18