Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将可变任务ID传递给xcom.pull-in?_Python_Jinja2_Airflow_Apache Airflow Xcom - Fatal编程技术网

Python 如何将可变任务ID传递给xcom.pull-in?

Python 如何将可变任务ID传递给xcom.pull-in?,python,jinja2,airflow,apache-airflow-xcom,Python,Jinja2,Airflow,Apache Airflow Xcom,有时我发现使用循环创建任务很方便 下面是一个SqoopOperator的示例,我在where子句中使用了前面Python操作符中的xcom值。我试图使用变量get\u delivery\u sqn\u task\u id访问正确的xcom值ti.xcom\u pull(task\u id=get\u delivery\u sqn\u task\u id,但是这不起作用(返回()) 我可以把所有东西都从循环中去掉,但我认为这会让代码非常难看。有没有一个优雅的解决方案,可以使用变量task_id来检

有时我发现使用循环创建任务很方便

下面是一个SqoopOperator的示例,我在where子句中使用了前面Python操作符中的xcom值。我试图使用变量
get\u delivery\u sqn\u task\u id
访问正确的xcom值
ti.xcom\u pull(task\u id=get\u delivery\u sqn\u task\u id
,但是这不起作用(返回())

我可以把所有东西都从循环中去掉,但我认为这会让代码非常难看。有没有一个优雅的解决方案,可以使用变量task_id来检索xcom值?我想,否则最好的解决方案就是使用变量

for table in tables:
    
    get_delivery_sqn_task_id ='get_delivery_sqn_'+ table 
    
    get_delivery_sqn_task = PythonOperator(
        task_id = get_delivery_sqn_task_id,
        python_callable = get_delivery_sqn,
        op_kwargs = {
            'table_name': table
            },
        provide_context = True,
        dag = dag
    )
    
    sqoop_operator_task = SqoopOperator(
        task_id = "sqoop_"+table,
        conn_id = "DWDH_PROD",
        table = table,
        cmd_type = "import",
        target_dir = "/sourcedata/sqoop_tmp/"+table,
        num_mappers = 1,
        where = "delivery_sqn > {{ ti.xcom_pull(task_ids=get_delivery_sqn_task_id, key='return_value') }}",
        dag = dag
    )
   
你可以做:

"delivery_sqn > {{{{ ti.xcom_pull(task_ids={}, key='return_value') }}}}".format(get_delivery_sqn_task_id)

感谢Elad!只缺少使任务id成为字符串的单引号,但这是可行的!
f“delivery_sqn>{{{{ti.xcom_pull(task_id='{get_delivery_sqn_task_id}',key='return_value')}}}