dbt - 将 dbt 宏的返回值传递给 python

问题描述 投票:0回答:1

从版本 1.5 开始,可以直接从 python 脚本中调用 dbt,例如:

from dbt.cli.main import dbtRunner, dbtRunnerResult

# initialize
dbt = dbtRunner()

# create CLI args as a list of strings
cli_args = ["run-operation", "get_something_macro"]

# run the command
res: dbtRunnerResult = dbt.invoke(cli_args)

# inspect the results
for r in res.result:
    print(f"{r}")

参见: https://docs.getdbt.com/reference/programmatic-in Vocations

假设我有一个简单的宏,可以返回一些内容,例如:

{% macro get_current_catalog() %}

    {{ return(target.catalog) }}

{% endmacro %}

如何将返回值输入到python中?

到目前为止我唯一的想法是在宏中使用

print("...")
log("...", info=True)
并捕获标准输出。但我认为必须有更好的方法......

也许你们中的一些人/女孩知道。

python dbt
1个回答
0
投票

你不能在Python模型中直接使用宏,因为你不能在Python模型中使用Jinja。

此问题的解决方法是在 yml 中调用宏:

models:
  - name: model_my
    config:
      materialized: incremental
      tags: [ 'python' ]
      current_catalog: '{{ get_current_catalog() }}'
def model(dbt, session):
    print(dbt.config.get("current_catalog"))

请参阅此问题以供参考

© www.soinside.com 2019 - 2024. All rights reserved.