Airflow 与XCOM和BASH运算符的气流相关性
然而,这并不能正常工作,我应该承认这是我第一次使用python。任何帮助都是非常有用的。我已经建立了一个测试DAG来执行以下操作,但它不起作用:Airflow 与XCOM和BASH运算符的气流相关性,airflow,apache-airflow-xcom,Airflow,Apache Airflow Xcom,然而,这并不能正常工作,我应该承认这是我第一次使用python。任何帮助都是非常有用的。我已经建立了一个测试DAG来执行以下操作,但它不起作用: 运行任务t1并返回一个值 如果1中的值为“全部成功”,则运行任务t2 从日期时间导入日期时间 从airflow.models导入DAG 从afflow.operators.bash_operator导入bash operator def set U触发器(taskid,**kwargs): xcomValue={{task\u instance.x
- 运行任务t1并返回一个值
- 如果1中的值为“全部成功”,则运行任务t2
从日期时间导入日期时间
从airflow.models导入DAG
从afflow.operators.bash_operator导入bash operator
def set U触发器(taskid,**kwargs):
xcomValue={{task\u instance.xcom\u pull(task\u id=taskid)}
打印(xcomValue,“为什么不使用BranchPythonOperator
():
这样,只有在t1返回的值为0
从日期时间导入日期时间
从airflow.models导入DAG
从afflow.operators.bash_operator导入bash operator
def set_触发器(任务ID,**kwargs):
xcomValue={{task\u instance.xcom\u pull(task\u id=taskid)}
打印太长了,读不下去了,在读的时候,需要知道为什么你做的是错误的/不可能的。在DAG解析时间,TL;DR <代码> TrutGryRead < /Cord>输入,但是模板如<代码> {{TaskYuff.xCCOMLAPH(TaskJiDs=TaskID)}。
不是在分析/生成DAG时具体化,而是在运行DAG时具体化(DAG->DagRun,Task->TaskInstance)@y2k shubham我真正想要的是确保在t1返回特定值时跳过t2…气流可以实现这种自定义依赖吗?@y2k shubham谢谢,我想我理解为什么不可能使用触发器…是我实现气流这种自定义依赖的另一种方法吗?好的,所以基本上你需要在另一个任务中检索任务的状态
;检查并
from datetime import datetime
from airflow.models import DAG
from airflow.operators.bash_operator import BashOperator
def set_trigger(taskid, **kwargs):
xcomValue = {{ task_instance.xcom_pull(task_ids=taskid) }}
print( xcomValue, " <------- LOOK HERE XCOM VAR")
if(xcomValue == "0"):
return TriggerRule.ALL_SUCCESS
return TriggerRule.ALL_FAILED
dag = DAG(dag_id="example_bash_operator", schedule_interval=None, start_date=datetime(2018, 12, 31) ) as dag:
t1 = BashOperator(
task_id="t1",
bash_command='do something && echo 0 ',
dag=dag
)
t2 = BashOperator(
task_id="t2",
bash_command='do something else here ',
trigger_rule=set_trigger,
dag=dag,
)
t1 >> t2
```