[Airflow] Jinja 템플릿
·
Data Engineering/Airflow
Jinja 템플릿 ▪ 문서 파일에서 특정 양식으로 작성된 값을 런타임 시 실제 값으로 치환해주는 처리 엔진 ▪ 템플릿 엔진은 여러가지가 존재하는데, 파이썬에서 사용하는 엔진은 Jinja 템플릿 ▪ {{변수}} 형태로 string을 만들고 render 함수로 값을 입력해주면, 실제 값으로 치환됨 from jinja2 import Template template = Template('my name is {{name}}') new_template = template.render(name='dodo') print(new_template) ## 실행결과 # my name is dodo Jinja 템플릿의 활용 ▪ Python 기반 웹 프레임워크인 Flask, Django에서 주로 사용하며, HTML 템플릿 저장 ..
[Airflow] Python Operator op_kwargs 파라미터
·
Data Engineering/Airflow
함수에 일반 변수만 있는 경우 ▪ PythonOperator의 "op_kwargs"에 딕셔너리 형태로 값을 전달 ▪ regist 함수를 호출할때 name과 sex에 각각 'dodo'와 'man'이라는 값이 할당됨 def regist(name, sex): print(f'이름은 {name}이고 성별은 {sex}입니다') python_task = PythonOperator( task_id = 'python_task', python_callable=regist, op_kwargs={'name':'dodo', 'sex':'man'} ) 함수에 **kwargs만 있는 경우 ▪ 마찬가지로 PythonOperator의 "op_kwargs"에 딕셔너리 형태로 값을 전달 ▪ 모든 값들은 kwargs에 할당됨 def reg..
[Airflow] Python Operator op_args 파라미터
·
Data Engineering/Airflow
함수에 일반 변수만 있는 경우 ▪ PythonOperator의 "op_args"에 리스트 형태로 값을 전달 ▪ name과 sex에 각각 'dodo'와 'man'이라는 값이 할당됨 def regist(name, sex): print(f'이름은 {name}이고 성별은 {sex} 입니다') python_task = PythonOperator( task_id = 'python_task', python_callable=regist, op_args=['dodo','man'] ) 함수에 *args만 있는 경우 ▪ 마찬가지로 PythonOperator의 "op_args"에 리스트 형태로 값을 전달 ▪ 모든 값이 args에 할당됨 def regist(*args): print(args) python_task = Pytho..
[Airflow] Python 함수 파라미터
·
Data Engineering/Airflow
일반적인 함수 인자 작성 방법 ▪ 인자가 받을 수 있는 값이 정해져 있음 ▪ 몇 개의 파라미터가 넘겨질지 모르거나, 선택적으로 변수를 받을 경우 문제가 생김 def regist(name, sex): print(name) print(sex) regist('name', 'man') *args 함수 인자 ▪ *args를 이용해서 다른 부가정보도 추가적으로 넣어줄 수 있음 ▪ 일반 변수에 할당하고 남은 파라미터들은 튜플 형태인 args에 저장됨 ▪ args에서 값을 꺼낼 때는 인덱스 이용 def regist(name, sex, *args): print(type(args)) country = args[0] if len(args) >= 1 else None city = args[1] if len(args) >=2 ..
[Airflow] Task decorator 사용하기
·
Data Engineering/Airflow
Python decorator ▪ 원래의 Python 함수를 감싸서(wrapping) 바깥에 추가 기능을 덧붙이는 방법 Python 함수의 특징 ▪ 함수의 인자로 함수를 전달하는 것이 가능 ▪ 함수 안에 함수를 선언하는 것이 가능 ▪ 함수를 return 할 수 있음 def outer_func(target_func): def inner_func(): print('target 함수 실행 전 입니다.') target_func() print('target 함수 실행 후 입니다.') return inner_func ▪ 이러한 특징을 이용하면 기존 함수를 wrapping해서 추가 기능을 덧붙일 수 있음 def outer_func(target_func): def inner_func(): print('target 함수..
[Airflow] 외부 python 함수 실행하기
·
Data Engineering/Airflow
Python 모듈 경로의 이해 ▪ python은 sys.path 변수에서 모듈의 위치를 검색 ▪ 실행하는 파이썬 파일과 동일 경로에 있는 파일은 실행 가능함 ▪ 어떤 함수를 만들고 dag에 그 함수를 import하기 위해서는 만들었던 python 파일의 경로를 "sys.path"에 추가해야함 sys.path에 경로를 추가하는 방법 ▪ 명시적으로 추가 ex) sys.path.append('/home/new') ▪ 또는 os 환경변수 pythonpath에 값을 추가 Airflow에서의 경로 ▪ Airflow는 자동적으로 dags 폴더와 plugins 폴더를 sys.path에 추가함 ▪ airflow 컨테이너로 이동해서 "airflow info" 명령어를 입력하면 python_path를 확인할 수 있는데, d..
[Airflow] Python Operator 기본
·
Data Engineering/Airflow
Python Operator 란? ▪ python 함수를 실행해주는 operator로 가장 많이 쓰임 dags_python_operator.py ▪ 매일 6시 30분에 작업하도록 스케줄링 ▪ 리스트에 포함된 과일을 랜덤하게 print 해주는 select_fruit() 함수 작성 ▪ PythonOperator의 "python_callable"에 실행하고자 하는 함수를 넣어주면 됨 from airflow import DAG import pendulum import datetime from airflow.operators.python import PythonOperator import random with DAG( dag_id="dags_python_operator", schedule="30 6 * * *",..
[Airflow] Email Operator 사용하기
·
Data Engineering/Airflow
Email Operator 란? ▪ 이메일을 전송해주는 operator ▪ Email Operator를 사용하기 위해 사전 셋팅 작업이 필요함 1. 사전 설정 작업 (Email 서버 설정) ▪ 구글 메일 서버 사용 ▪ Gmail 로그인 후 [설정] -> [모든 설정 보기]로 이동 ▪ [전달 및 POP/IMAP] 클릭 후, [IMAP 사용] 체크 ▪ [변경사항 저장] 클릭 3. 사전 설정 작업 (앱 비밀번호 생성) ▪ [Google 계정 관리] 클릭 ▪ [보안] -> [2단계 인증] 클릭 ▪ 로그인 창이 뜨는데 로그인 진행 ▪ [앱 비밀번호] 클릭 ▪ 앱 이름 설정 후 [만들기] 클릭 ▪ 그러면 앱 비밀번호가 생성되는데 복사해서 잘 저장해 두기 3. docker-compose.yaml 파일 수정 ▪ doc..