Airflow 我不能用xcom_通过bash操作符推送参数

Airflow 我不能用xcom_通过bash操作符推送参数,airflow,apache-airflow-xcom,Airflow,Apache Airflow Xcom,我不熟悉Airflow的xcom功能。我用PythonOperator试过了,效果很好,也就是说,我可以把值从上下文中推出来,但是当我在bash操作符上试过时,它不起作用。但是,通过在任务创建期间添加xcom_push=True属性,我只能提取最后的stdout语句。这是一件事。2但是我也希望根据它们的键在BashOp中推拉值,就像我们在PythonOp中所做的那样。。这将非常有用,因为我需要将大量变量从一个脚本传递到另一个脚本。这就是您想要的吗 from datetime import dat

我不熟悉Airflow的xcom功能。我用PythonOperator试过了,效果很好,也就是说,我可以把值从上下文中推出来,但是当我在bash操作符上试过时,它不起作用。但是,通过在任务创建期间添加xcom_push=True属性,我只能提取最后的stdout语句。这是一件事。2但是我也希望根据它们的键在BashOp中推拉值,就像我们在PythonOp中所做的那样。。这将非常有用,因为我需要将大量变量从一个脚本传递到另一个脚本。

这就是您想要的吗

from datetime import datetime
from airflow.models import DAG
from airflow.operators.bash_operator import BashOperator

dag = DAG(
    dag_id="example_bash_operator_1",
    schedule_interval=None,
    start_date=datetime(2018, 12, 31),
)

t1 = BashOperator(
    task_id="t1",
    bash_command='echo "{{ ti.xcom_push(key="k1", value="v1") }}" "{{ti.xcom_push(key="k2", value="v2") }}"',
    dag=dag,
)

t2 = BashOperator(
    task_id="t2",
    bash_command='echo "{{ ti.xcom_pull(key="k1") }}" "{{ ti.xcom_pull(key="k2") }}"',
    dag=dag,
)

t1 >> t2

@SpaceyBot&Lucas回答了您的第一个问题。 关于提出的第二个问题

大宗报价

2但是我也希望根据它们的键在BashOp中推拉值,就像我们在PythonOp中所做的那样。。这将非常有用,因为我需要将大量变量从一个脚本传递到另一个脚本

大宗报价

这是不可取的。所有XCom拉/推操作都转换为数据库中的Insert/Select语句。 这将在时间上降低调度程序的性能,并降低整个处理的速度,这可能是因为运行了大量pullqueries,或者检索到大量行,这些行将通过完整表扫描而不是基于索引的扫描进行检索。 所以最好在这里考虑一个不同的机制——在外部JSON/CSV/TXT文件中存储信息…等等


底线-XCom仅用于传输少量数据,主要是计数器和状态变量。

谢谢,但当我在bash文件中执行相同操作,而不是在bash_命令变量本身中执行时,它不起作用。如下所示:bash_command='/home/me/blah.sh',其中blah.sh与放在“”中的内容完全相同,因此在执行bash脚本时它不起作用是有意义的,因为bash_命令在执行之前由Jinja引擎反模板化。此外,xcom_pull和xcom_push仅在Airflow上下文中可用,在bash脚本中不可用。希望能帮上忙我很确定在那堵文字墙里隐藏着一个答案。请使用此信息使其更加明显: