如何让dbt数据血缘图展示与非dbt原生数据库表的依赖关系?
太懂这种需求了!dbt生成的血缘图确实好用,但默认只认它自己创建的表和视图,要把数据库里的「原生」表加进依赖关系里,其实有几个靠谱的办法,我给你拆解下:
方法一:用dbt官方的Sources功能(最推荐,规范且持久)
这是dbt专门为数据库原生对象设计的方案,操作起来很简单:
- 第一步:在你的dbt项目里创建
models/sources.yml(或者在已有的sources配置文件里新增),把原生表orders定义成source:
sources: - name: my_db # 替换成你的数据库名称 schema: public # 替换成orders表所在的schema tables: - name: orders description: "数据库原生的订单主表,未通过dbt管理"
- 第二步:修改你的
open_orders模型代码,把直接写的orders改成引用这个source:
SELECT * FROM {{ source('my_db', 'orders') }} WHERE status='Open'
- 第三步:重新生成文档和血缘图,依次运行命令:
dbt docs generate dbt docs serve
打开本地文档后,你就能看到open_orders清晰地依赖于原生表orders了!
方法二:不想改模型代码?试试临时配置方案
要是你暂时不想修改现有模型的SQL,也可以通过配置强制添加依赖关系,不过这种方式没有合法性校验,适合临时场景:
- 在
dbt_project.yml里给open_orders模型添加depends_on配置:
models: my_dbt_project: # 替换成你的dbt项目名 open_orders: depends_on: - source: my_db.public.orders
重新生成文档后,血缘图里也会显示这个依赖,但dbt不会检查这个原生表是否真的存在,所以长期用还是推荐第一种方法。
额外小提示
- 配置好Sources后,还可以用
dbt source freshness命令监控这些原生表的更新时间,让文档里的血缘信息更实用。 - 如果你用的是dbt Cloud,操作逻辑和本地完全一致,配置好Sources后,Cloud上的文档和血缘图也会自动同步显示原生表的依赖。
内容的提问来源于stack exchange,提问作者MYK
相关产品推荐
相关产品推荐

