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

如何将dbt宏的返回值传递至Python程序?

如何从Python中获取dbt宏的返回值

dbt 1.5及以上版本提供的dbtRunner可以直接获取宏的返回值,无需通过捕获标准输出的方式,这是更可靠、更简洁的方案。

实现步骤

  1. 确保宏使用return返回目标值
    你的宏已经正确使用return返回target.catalog,这是实现的前提:

    {% macro get_current_catalog() %}
        {{ return(target.catalog) }}
    {% endmacro %}
    
  2. 在Python中调用宏并直接读取返回值
    使用dbtRunner.invoke()执行run-operation命令后,宏的返回值会被包含在dbtRunnerResult.result属性中,直接读取即可:

    from dbt.cli.main import dbtRunner, dbtRunnerResult
    
    # 初始化dbtRunner实例
    dbt = dbtRunner()
    
    # 构造调用宏的CLI参数列表
    cli_args = ["run-operation", "get_current_catalog"]
    
    # 执行命令并获取结果
    res: dbtRunnerResult = dbt.invoke(cli_args)
    
    # 处理结果
    if res.success:
        # 宏的返回值存储在res.result中,单个返回值取第一个元素
        catalog_value = res.result[0]
        print(f"宏返回的catalog: {catalog_value}")
    else:
        # 处理执行失败的情况
        print(f"宏执行失败: {res.exception}")
    

方案优势

  • 无需解析标准输出,避免日志、其他信息干扰导致的解析错误
  • 直接获取结构化的返回值,支持字符串、数字、字典、列表等可序列化类型
  • 利用dbt官方提供的API,兼容性和稳定性更强

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 05:04:52