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

Bri*_*tow 6 python dbt

我有一个 DBT 项目,一个 python 脚本将从 postgresql 获取数据以生成输出。

但是,Python 脚本的一部分需要使 DBT 运行。我还没有找到可以让我从外部脚本运行 DBT 的库,但我很确定它存在。我该怎么做呢?

ETA:正确的答案可能是下载 DBT CLI,然后使用 python 系统调用来使用它......我希望有一个库,但我会采取我能得到的。

tco*_*eer 12

更新:v1.5 已经到来!

通过 dbt v1.5,我们获得了稳定且官方支持的用于调用 dbt 操作的 Python API;该 API 的功能与 CLI 相同。

来自文档

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}")
Run Code Online (Sandbox Code Playgroud)

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

原答案

(截至 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")
Run Code Online (Sandbox Code Playgroud)

您还可以按照测试套件中的方式调用 dbt,使用run_dbt.