Python 函数xcom.pull()访问上游任务的隐式返回值

Python 函数xcom.pull()访问上游任务的隐式返回值,python,airflow,Python,Airflow,我是Python新手,也是气流新手 我正在使用雪花数据库 我创建了一个操作符snowflake GetDataOperator,它返回snowflake钩子。get_records方法我返回的是少量的Kine,通常是单个单元格 现在我在dag中有了这个任务: check_last_run_date=SnowflakeGetDataOperator( task_id='check_last_run_date', sql="SELECT COALESCE (max(update_da

我是Python新手,也是气流新手

我正在使用雪花数据库

我创建了一个操作符snowflake GetDataOperator,它返回snowflake钩子。get_records方法我返回的是少量的Kine,通常是单个单元格

现在我在dag中有了这个任务:

check_last_run_date=SnowflakeGetDataOperator(
    task_id='check_last_run_date',
    sql="SELECT COALESCE (max(update_date), '2000-01-01') FROM poc.dwh.fact_collector",
    snowflake_conn_id='snowflake_default',
    dag=dag)
当这个任务运行时,我会在这个任务的xcom对象中看到操作符的返回值——我没有使用xcom.push

我的问题是如何从下一个下游任务访问此值

我需要将它用作下一个sql运算符的参数

我在dag代码中尝试了以下行

{{ task_instance.xcom_pull(task_ids='check_last_run_date') }}
但是代码不能识别task_实例属性

编辑

下一个任务应该是

fill_agg_table = SnowflakeOperator( 
task_id='fill_cust_agg_data', 
sql= str.replace ("""INSERT INTO oc.TEMP_COMPUTING.collector_customer_aggregative_data 
  ( SELECT * FROM POC.STG."stg_atg_data" WHERE XXXXX < current_date)""", 
    'XXXXX', 
    {{ task_instance.xcom_pull(task_ids='check_last_run_date') }}, 
snowflake_conn_id='snowflake_default', 
dag=dag )) 

你的第二个任务看起来有点不寻常。如果字段是模板化的,您可以简单地将字段放入字符串中

事实上,使用string.replace或string.format会弄乱您的宏,并且在气流中无法很好地工作。其他宏如下所示:

确保在自己的操作符中模板化sql字段。如何执行此操作请参见此示例代码并检查变量模板化的_字段

建议:

sql= """INSERT INTO oc.TEMP_COMPUTING.collector_customer_aggregative_data 
  ( SELECT * FROM POC.STG."stg_atg_data" WHERE {{ task_instance.xcom_pull(task_ids='check_last_run_date') }} < current_date)""", 

很晚了,但你的头衔就是答案:

不带参数的xcom_pull将返回dagrun的最新返回值,因此是直接上游任务推送的值,假设只有一个任务

文档中没有明确说明,但我更喜欢这样,而不是硬编码任务名称