-
5. Airflow variablesLearn/Airflow 2021. 11. 19. 21:07
조만간 업무상 bigquery에서 airflow를 쓰게될 것 같다. 그땐 아래 링크를 보고.. 일단 variable로 jump
Airflow에서는 key-value 쌍으로 된 variable들을 설정할 수 있다.
물론 아래와 같이 직접 DAG 코드에 작성할 수 있지만 이렇게 사용하지 말기를 권장한다.
# Do not use variables like this var1 = "value1" var2 = [1, 2, 3] var3 = {'k': 'value3'}
그럼 어떻게 쓰는게 좋은건가?
Web UI에서 Variable에 key-value를 등록해서 사용하길 권장한다.
다만 주의할 점은, 이 Variable들은 Airflow Metadata DB에 저장되는데 숫자 제한이 있다고 한다.
그러니 아래와 같이 쓰지말고
Key Value var1 value1 var2 [1, 2, 3] var3 {'k': 'value3'} 다음과 같이 하나의 key-value로 넣기를 권장한다.
(물론 json파일로 손쉽게 import 가능하다)
Key Value example_variables_config {"var1": "value1", "value2": [1, 2, 3], "value3": {"k": "value3"}} 그럼 코드에서 아래와 같이 접근할 수 있다.
# Recommended way dag_config = Variable.get("example_variables_config", deserialize_json=True) var1 = dag_config['var1'] var2 = dag_config['var2'] var3 = dag_config['var3']
아래는 task에서 Jinja template를 사용할 때 Variable에 접근하는 예시이다.
t1 = BashOperator( task_id = "get_dag_config", bash_command = 'echo "{0}"'.format(dag_config), dag=dag, ) # {{ var.value.<variable_name> }} t2 = BashOperator( task_id = "get_variable_value", bash_command = 'echo {{ var.value.var3 }} ', dag = dag, ) ## {{ var.json.<variable_name> }} t3 = BashOperator( task_id = "get_variable_json", bash_command='echo {{ var.json.example_variables_config.var3 }} ', dag=dag, ) start >> [t1, t2, t3]
CLI에서 위의 작업들을 하는 방법은 다음과 같다.
# get value of var1 docker-compose run --rm webserver airflow variables --get var1 # set value of var4 docker-compose run --rm webserver airflow variables --set var4 value4 # import variable json file docker-compose run --rm webserver airflow variables --import /user/local/airflow/dags/config/example_variables.json
'Learn > Airflow' 카테고리의 다른 글
[Airflow] sub dag (0) 2022.04.07 4. Airflow concept (0) 2021.11.14 3. pipeline을 만들어보자 (+execution_date) (0) 2021.11.11 2. 설치 및 셋업 (WSL2 / Docker / Airflow) (0) 2021.11.09 1. Airflow 소개 (0) 2021.11.08