首页/数据/数据工程与 ETL 速查/Airflow XCom 跨任务传参

Airflow XCom 跨任务传参

XCom 用于任务之间传递少量数据:push 写入、pull 读取,TaskFlow 下自动处理;底层存在元数据库中,跨任务传大对象会明显拖慢调度。

写入ti.xcom_push(key, value) 或函数返回值
读取ti.xcom_pull(task_ids=..., key=...)
存储位置Airflow 元数据库 xcom 表
清理随 DAG 运行记录归档或清理

push 与 pull

push 与 pull
def push(**context):
    context["ti"].xcom_push(key="part", value="dt=2026-10-11")

def pull(**context):
    part = context["ti"].xcom_pull(task_ids="push", key="part")
    print(part)

TaskFlow 自动传参

TaskFlow 自动传参
@task
def a() -> str:
    return "dt=2026-10-11"

@task
def b(part: str) -> None:
    print(part)

b(a())
XCom 值会序列化进元数据库;传百万行数据会让元数据库膨胀、界面卡顿。

易错点

  • xcom_pull 默认取同一 dag_run 内的值,跨 DAG 取数需要另设计
  • 用 XCom 传文件路径没问题,传文件内容就是事故

数据来源与参考

  • Apache Airflow 官方文档:XComs
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌