如何将dbt宏的返回值传递至Python程序?
如何从Python中获取dbt宏的返回值
dbt 1.5及以上版本提供的dbtRunner可以直接获取宏的返回值,无需通过捕获标准输出的方式,这是更可靠、更简洁的方案。
实现步骤
确保宏使用
return返回目标值
你的宏已经正确使用return返回target.catalog,这是实现的前提:{% macro get_current_catalog() %} {{ return(target.catalog) }} {% endmacro %}在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
相关产品推荐
相关产品推荐

