Airflow 通过XCOM处理返回值

Airflow 通过XCOM处理返回值,airflow,Airflow,我正在尝试创建气流dag,如下所述: 我有一个相当大的python代码,最终创建了一个文件。 该文件是使用特定名称创建的,例如sales20180213020.json 以下气流任务是s3BucketUpload操作员。它需要获取文件名才能上传到s3 第一个python文件可能由bash操作符运行。它如何使用文件名创建Xcom密钥?是否有其他方法传递该值 谢谢 Shaby只要路径参数包含在操作符类中的模板参数中,气流将为您插值。我不知道s3BucketUpload操作符是什么样子,所以我假设参数

我正在尝试创建气流dag,如下所述: 我有一个相当大的python代码,最终创建了一个文件。 该文件是使用特定名称创建的,例如
sales20180213020.json

以下气流任务是
s3BucketUpload
操作员。它需要获取文件名才能上传到s3

第一个python文件可能由
bash操作符运行。它如何使用文件名创建Xcom密钥?是否有其他方法传递该值

谢谢
Shaby

只要路径参数包含在操作符类中的模板参数中,气流将为您插值。我不知道s3BucketUpload操作符是什么样子,所以我假设参数名

class s3BucketUploadOperator(BaseOperator):
    # this tuple is not used by anything in my operator classes and is not passed anywhere
    template_fields = ('local_path', 's3_path', )
    ...

def py_fn(task_instance, **context):
    task_instance.xcom_push(key='file_name', value='file.name')

py_task = PythonOperator(
    dag=dag,
    task_id='py_task',
    provide_context=True,
    python_callable=py_fn
)

s3_task = s3BucketUploadOperator(
    dag=dag,
    task_id='s3_task',
    s3_conn_id='?',
    local_path="path/to/dir/{{ task_instance.xcom_pull(key='file_name', task_ids='py_task') }}",
    s3_path="path/to/s3/dir/{{ task_instance.xcom_pull(key='file_name', task_ids='py_task') }}"
)
编辑


如果要使用bash操作符,
bash\u command=“echo{{{task\u instance.xcom\u pull(key='file\u name',task\u ids='py\u task')}”
应该将文件名打印到任务日志中。

可以使用Python操作符运行Python代码并将文件名推送到xcom。