jinja 7

[Airflow] 전역 공유변수 Variable

앞서서는 특정 dag에 있는 task끼리만 데이터를 공유할 수 있는 방법이었다면, 모든 dag에서 데이터를 접근하는 방식에 대해 알아볼까합니다. 그런 용도로 airflow에서 기능을 제공하는 것이 Variable 입니다. 1. 전역변수 Variable 이해 Xcom: 특정 DAG, 특정 schedule에 수행되는 Task 간에만 공유 모든 DAG이 공유할 수 있는 전역 변수는 없을까요? → 바로 Variable이 있습니다! ※ Variable 등록하기 : airflow 서비스를 띄우고, Admin 탭에 들어가서 Variables 메뉴를 누르고 "+" 버튼을 누르면 됩니다. : 실제 Variable의 Key, Value 값은 메타 DB에 저장됩니다. (variable 테이블) Variable도 Key, V..

[Airflow] Python Operator with macros

BashOperator에서도 macro변수를 어떻게 쓸 수 있는지 알아본만큼, 이번 시간에는 PythonOperator에서 macro를 사용하는 방법을 알아보겠습니다. 1. 먼저 PythonOperator에서는 어떤 파라미터가 Template 변수를 지원할까요? 공식문서를 살펴보면, 'template_dict', 'op_args', 'op_kwargs' 가 템플릿을 지원합니다. 저번에는 op_kwargs 를 이용해서 template 변수를 써봤으므로, 이번에는 templates_dict 를 써서 macro변수를 써보겠습니다. Python 오퍼레이터를 사용해 macro변수를 써보는 코드를 작성해보겠습니다. @task(task_id = 'task_using_macros', templates_dict = {'..

[Airflow] Bash Operator with macros

Macro 변수는 Jinja 템플릿 내에서 날짜 연산을 가능하게끔 해주는 기능으로서 파이썬의 datetime이나 dateutil 같은 라이브러리를 이용해서 날짜연산을 할 수 있도록 지원을 해주고 있습니다. 1. 먼저 이런 Macro변수가 왜 필요한지 살펴봅시다. 아래상황을 가정해봅시다. DAG 스케줄은 매일 말일에 도는 스케줄인데(ex 0 0 L * *), BETWEEN 값을 전 월 마지막일부터 어제 날짜까지 주고 싶은데 어떻게 할까요? sql = f``` SELECT NAME, ADDRESS FROM TBL_REG WHERE REG_DATE BETWEEN ?? AND ?? ''' 와 같은 sql 이 있다고 합시다. 여기서 예를 들어, 배치일이 1월 31일이면, 12월 31일부터 1월 30일까지 배치일이..

[Airflow] Python Operator에서 Jinja 템플릿 사용하기

저번에는 Bash Operator를 Jinja 템플릿을 사용했다면, 이번에는 Python Operator에서 사용해봅시다. 1. Python 오퍼레이터에서 with Template Python 오퍼레이터는 어떤 파라미터에 Template을 쓸 수 있을까요? 공식문서를 살펴보면 아래와 같습니다. python_callable op_kwargs op_args template_dict template_exts show_return_value_in_logs op_kwargs 와 op_args, template_dict 세 개의 파라미터가 template을 쓸 수 있습니다. 바로 한 번 실습을 해보도록 하겠습니다. 이 중에서, op_kwargs를 이용해서 jinja 템플릿을 써보도록 하겠습니다. (※ 파이썬 오퍼레..

[Airflow] Airflow의 날짜 개념

이전 포스팅에서 bash operator를 이용해 템플릿 변수를 출력해봤는데, 치환된 값이 어떤 값인지 이해하기 위해서 먼저 Airflow에서의 날짜개념을 짚고 넘어가야 할 필요가 있습니다. 1. Airflow 날짜 Template 변수 이해 먼저, 데이터 추출 예시를 살펴봐봅시다. (ex) 등록 테이블 REG_DATAE NAME ADDRESS 2023-02-24 15:34:35 홍길동 Busan 2023-02-24 19:14:42 김태희 Seoul 2023-02-24 23:52:19 조인성 Daejeon Daily ETL 처리를 위한 조회 커리 (2023/02/25 0시 실행) 라고 가정합시다. (그렇게 되면, 24일에서 25일 사이의 데이터를 가져오는 셈이겠죠?) 쿼리를 작성해보면 아래와 같습니다. ..

[Airflow] Bash 오퍼레이터 with Template

Bash Opertor를 쓰면서 Jinja 템플릿을 어떻게 하면 적용할 수 있는지 살펴봅시다. 1. Bash 오퍼레이터 Bash 오퍼레이터는 어떤 파라미터에 Template를 쓸 수 있을까요? 공식문서를 살펴보면 아래와 같습니다. bash_command (str) (templated) env (dict[str,str] | None) append_env (bool) output_encoding (str) skip_exit_code (int) cwd (str | None) bash_command 와 env 두 개의 파라미터가 template을 쓸 수 있습니다. 바로 한 번 실습을 해보도록 하겠습니다. dags_bash_with_template.py 라는 파일을 dags폴더에 생성해 아래와 같이 코드를 짰습니..

[Airflow] Jinja 템플릿

에어플로우에서는 Jinja 템플릿을 활용하고 있기 때문에, 먼저 Jinja 템플릿에 대해 이해해보도록 하겠습니다. 1. Jinja 템플릿 문서(파일)에서 특정 양식으로 작성된 값을 런타임시 실제 값으로 치환해주는 처리 엔진입니다. 템플릿 엔진은 여러 솔루션이 존재하며 그 중 Jinja 템플릿은 파이썬 언어에서 사용하는 엔진입니다. ※ Jinja 라이브러리는 airflow를 설치할 때, 이미 설치가 됩니다. 예시 코드를 살펴봅시다. from jinja2 import Template template = Template('my name is {{name}}') new_template = template.render(name='allu') print(new_template)# my name is allu {{n..

반응형