我是Airflow的xcom功能的新手。我使用PythonOperator进行了尝试,并且运行良好(即,我可以将值推入和拉出上下文),但是当我在BashOperator上进行尝试时,它不起作用。但是,通过在任务创建过程中添加xcom_push = True属性,我只能拉出最终的stdout语句。那是一回事。 2)但我也希望像我们在PythonOp中那样,基于它们的键(与BashOp之间的键)推和拉值。这将非常有帮助,因为我需要将大量变量从一个脚本传递给另一个。
答案 0 :(得分:2)
这是您想要的吗?
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
答案 1 :(得分:0)
@SpaceyBot和Lucas回答了您的第一个问题。 关于提出的第二个问题
Blockquote
2)但我也希望像在PythonOp中一样,根据它们的键(与BashOp进行键值)来推和拉值。这将非常有帮助,因为我需要从一个脚本复制到另一个脚本。
Blockquote
因此,最好在这里考虑一种不同的机制-将信息存储在外部json / csv / txt文件/ ..等中。
底线-XCom设计为仅传输少量数据,主要是计数器和状态变量。