ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 5. Airflow variables
    Learn/Airflow 2021. 11. 19. 21:07

    조만간 업무상 bigquery에서 airflow를 쓰게될 것 같다. 그땐 아래 링크를 보고.. 일단 variable로 jump

    https://youtu.be/wAyu5BN3VpY

     

     

    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

    댓글

Designed by Tistory.