You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Airflow中FileSensor的filepath参数能否使用xcom_pull获取XCOM存储的路径?

Airflow FileSensor读取XCom路径的正确实现

你的两种现有写法都不可行,具体原因与修正方案如下:

第一种写法的问题与修正

你直接在Python代码中拼接{{ ti.xcom_pull(...) }}的方式不符合规范:Jinja模板表达式必须放在字符串内部,只有Operator声明支持模板渲染的参数,才会在任务实际运行时完成模板解析。
FileSensor的filepath参数默认属于支持模板渲染的字段,不需要额外配置templates参数即可生效,正确写法如下:

t2 = FileSensor(
    task_id = 'waiting_for_file_download',
    poke_interval = 60 * 5,
    timeout = 60 * 10,
    mode = 'reschedule',
    filepath = "{{ ti.xcom_pull(task_ids = 'downloaded_file', key = 'file_path') }}transformed_new.csv.gz"
)

注意:如果XCom中存储的file_path末尾没有带路径分隔符(如Linux下的/、Windows下的\),你需要在模板的对应位置补上分隔符,避免拼接出错误路径。

第二种写法的错误原因

直接调用XCom.get_one()的写法无法生效,核心原因是该代码会在DAG解析阶段(调度器加载DAG代码时)就执行:

  • 此时上游downloaded_file任务还未运行,没有生成对应的XCom数据
  • 你传入的execution_date = date.today()是DAG被解析时的日期,不是当前DAG运行实例的执行日期,无法匹配到对应XCom
  • 任务上下文context仅在任务实际运行时才会生成,定义Operator的阶段无法获取上下文,因此这种写法不适用于直接给Sensor参数赋值。

必要配置

必须配置任务依赖,确保生成XCom的上游任务在FileSensor之前执行,示例如下:

# 假设生成XCom的任务对象名为download_task
download_task >> t2

内容的提问来源于stack exchange,提问作者dimButTries

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 22:24:00