如果已部署的 DAG 使用的 Airflow 变量发生更改,是否会自动获取更改?

If an Airflow variable used by a deployed DAG is changed, does the change get picked up automatically?

Airflow 是否会自动检测已部署的 DAG 使用的已更改变量并立即应用更改,或者是否需要 DAG 手动重启或刷新才能应用已更改变量的新值?

气流变量存储在数据库中。 Airflow 不维护 DAG <-> 变量关系。变量不绑定到特定的 DAG。 当在您的代码中调用 Variable.get() 时,会填充变量的值。

如果在 DAG 代码中使用了 airflow 变量,如下所示,更改(python 变量间隔)将在执行调度程序时设置为该 airflow 变量的值下次。调度程序以较短的间隔周期性地执行。

# experimental_dag.py
default_args = {
    'owner': 'anonymous',
    'start_date': datetime.datetime(2021, 12, 1),
}

interval = Variable.get('interval', '@daily')

dag = DAG(
    'experimental_dag',
    default_args=default_args,
    schedule_interval=interval
)

def write_log(ts):
    with open('./output.txt', 'a') as f:
        f.write(f'{ts}\n')


py_task = PythonOperator(
    task_id='load_yesterday_data',
    python_callable=write_log,
    op_kwargs={
        'ts': '{{ ts }}'
    },
    dag=dag
)

如果更改了DAG代码,比如上面的experimental_dag.py,这种情况下,肯定需要将DAG复制到dag文件夹(airflow.cfg中配置)