dbt-server 简单说明
dbt-server 是dbt 团队对于dbt-rpc 调整之后开源的dbt api 服务,内部基于了dbt-core 提供的cli 编程调用能力
使用到的一些框架
- fastapi 提供api 能力
- dbt core 进行dbt 任务的执行
- celery 基于celery 的任务调度(代码中的worker)
dbt core 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}")
- 状态服用
可以基于Manifest对象
from dbt.cli.main import dbtRunner, dbtRunnerResult
from dbt.contracts.graph.manifest import Manifest
# use 'parse' command to load a Manifest
res: dbtRunnerResult = dbtRunner().invoke(["parse"])
manifest: Manifest = res.result
# introspect manifest
# e.g. assert every public model has a description
for node in manifest.nodes.values():
if node.resource_type == "model" and node.access == "public":
assert node.description != "", f"{node.name} is missing a description"
# reuse this manifest in subsequent commands to skip parsing
dbt = dbtRunner(manifest=manifest)
cli_args = ["run", "--select", "tag:my_tag"]
res = dbt.invoke(cli_args)
当然dbt-core 还支持了回调,可以进行一些状态的维护处理
dbt cloud 参考架构
如下图,可以看到dbt cloud 的一些设计
说明
注意dbt-server license 许可是有一些限制的,但是因为是基于了dbt-core 提供的cli 能力,我们也可以很好的自己开发一个
同时dbt 也提供了自己cloud 的架构设计,可以参考学习,实际上有一篇有点老的完整介绍,也值得学习下
参考资料
https://github.com/dbt-labs/dbt-server/blob/main/CONTRIBUTING.md#developer-setup
https://github.com/dbt-labs/dbt-core
https://docs.getdbt.com/reference/programmatic-invocations
https://docs.getdbt.com/docs/cloud/about-cloud/architecture
https://drive.google.com/uc?export=download&id=1lktNuMZybXfqFtr24J8zAssEfoL9r51S
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
2019-07-31 genie 来自netflix 的分布式大数据调度服务
2018-07-31 Cannot find name 'AsyncIterator' error in Typescript compilation process 问题解决
2017-07-31 使用 lego生成 Let's Encrypt 证书