从子dag

时间:2017-04-19 16:42:01

标签: python airflow

我正在使用包含许多子标记的主dag(main_dag),每个子标记都有许多任务。我从subdagA taskA推送了一个xcom,但我在subagB taskB中将xcom拉出来。由于xcom_pull()中的dag_id参数默认为self.dag_id,因此我无法获取必要的xcom。我想知道如何做到这一点和/或如果有更好的方法来设置这个场景,所以我不必处理这个。

我目前在subdagB中做的例子:

def subdagB(parent_dag, child_dag, start_date, schedule_interval):
    subdagB = DAG('%s.%s' % (parent_dag, child_dag), start_date=start_date, schedule_interval=schedule_interval)
    start = DummyOperator(
        task_id='taskA',
        dag=subdagB)
    tag_db_template = '''echo {{ task_instance.xcom_pull(dag_id='dag.main_dag.subdagA', task_ids='taskA') }};'''
    t1 = BashOperator(
        task_id='taskB',
        bash_command=tag_db_template,
        xcom_push=True,
        dag=subdagB)
    end = DummyOperator(
        task_id='taskC',
        dag=subdagB)
    t0.set_upstream(start)
    t1.set_upstream(t0)
    end.set_upstream(t1)
    return subdagB

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:4)

只要您覆盖

中的dag_id,您就可以了。
  • [Operator].xcom_pull(dag_id=dag_id, ...)
  • [TaskInstance].xcom_pull(dag_id=dag_id, ...)

请确保

  

dag_id =“{parent_dag_id}。{child_dag_id}”

如果您可以让您的示例更完整,我可以尝试在本地运行它,但我测试了一个(类似的)示例和 cross-subdag xcoms 按预期工作。