如何从Python脚本或程序运行DBT模型?

disbfnqx  于 2023-04-28  发布在  Python
关注(0)|答案(1)|浏览(202)

我有一个DBT项目,一个python脚本将从postgresql获取数据以产生输出。
但是,部分python脚本需要运行DBT。我还没有找到可以让我从外部脚本运行DBT的库,但我很确定它存在。我该怎么做?
ETA:正确的答案可能是下载DBT CLI,然后使用python系统调用来使用它。……我希望有一个图书馆,但我会把我能得到的。

8i9zcol2

8i9zcol21#

更新:v1。5来了!

通过dbt的v1.5,我们得到了一个稳定的、官方支持的Python API,用于调用dbt操作;此API与CLI具有功能对等性。
关于docs

from dbt.cli.main import dbtRunner, dbtRunnerResult

# initialize
dbt = dbtRunner()

# create CLI args as a list of strings
cli_args = ["run", "--select", "tag:my_tag"]

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

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

关于dbt.invoke返回的工件的稳定性有一些警告;阅读文档了解更多细节。

原始应答

(As 2023年1月)目前还没有一个用于dbt的公共Python API。预计在v1中。5,应该在几个月内。
现在,您最安全的选择是使用CLI。如果您不想使用subprocess,CLI现在使用Click,而Click提供了一个运行程序,您可以使用它来调用Click命令。它通常用于测试,但我认为它也适用于您的用例。CLI命令在这里。它看起来像这样:

from click.testing import CliRunner
from dbt.cli.main import run

dbt_runner = CliRunner()
dbt_runner.invoke(run, args="-s my_model")

您也可以像在测试套件中那样调用dbt,使用run_dbt

相关问题