来自上一个Python运算符的Airflow Access变量

来自上一个Python运算符的Airflow Access变量,airflow,Airflow,我是气流新手,目前正在构建一个DAG,它将执行一个PythonOperator、一个bash操作符,然后是另一个PythonOperator,其结构如下: def authenticate_user(**kwargs): ... list_prev = [...] AUTHENTICATE_USER = PythonOperator( task_id='AUTHENTICATE_USER', python_callable=authenticat

我是气流新手,目前正在构建一个DAG,它将执行一个PythonOperator、一个bash操作符,然后是另一个PythonOperator,其结构如下:

def authenticate_user(**kwargs):
    ...
    list_prev = [...]

AUTHENTICATE_USER = PythonOperator(
        task_id='AUTHENTICATE_USER',
        python_callable=authenticate_user,
        provide_context=True,
        dag=dag)

CHANGE_ROLE = BashOperator(
        task_id='CHANGE_ROLE',
        bash_command='...',
        dag=dag)

def calculations(**kwargs):
    list_prev
    ...

CALCULATIONS = PythonOperator(
    task_id='CALCULATIONS',
    python_callable=calculations,
    provide_context=True,
    dag=dag)
我的问题是,我在第一个PythonOperator(AUTHENTICATE\u USER)中创建了一个变量列表,我希望在执行bash操作符(CHANGE\u角色)后在第二个PythonOperator(计算)中使用该列表。有没有一种方法可以让我将创建的列表转移到我当前DAG中的其他PythonOperators中


谢谢

我可以想出3种可能的方法(为了避免与的混淆,我将您希望在任务之间共享的数据称为
s)

  • :验证用户任务中的值,并在计算任务中验证这些值。您可以单独发布和访问每个值,也可以将它们全部打包到Python dict或列表中(这样做更好,因为它可以减少数据库的读写)

  • 外部系统:将您的值从第一个任务保存到一些外部系统中,如数据库、文件或S3对象,并在需要时从下游任务访问它们

  • :这是上述第(2)点的具体情况(因为变量存储在Airflow的后端meta db中)。通过利用底层的
    SQLAlchemy
    模型,您可以以编程方式创建、修改或删除变量。有关提示,请参阅


  • 我可以想出3种可能的方法(为了避免与的混淆,我将您希望在任务之间共享的数据称为
    value
    s)

  • :验证用户任务中的值,并在计算任务中验证这些值。您可以单独发布和访问每个值,也可以将它们全部打包到Python dict或列表中(这样做更好,因为它可以减少数据库的读写)

  • 外部系统:将您的值从第一个任务保存到一些外部系统中,如数据库、文件或S3对象,并在需要时从下游任务访问它们

  • :这是上述第(2)点的具体情况(因为变量存储在Airflow的后端meta db中)。通过利用底层的
    SQLAlchemy
    模型,您可以以编程方式创建、修改或删除变量。有关提示,请参阅