dbt pacakge 模型引用
dbt 的package 能力可以方便的实现模型的共享,以下是一个简单的示例,实际上我以前写过(很早了,目前dbt 变化还是很大的)
外部模型引用使用说明
实际上是通过ref宏,明确声明包名以及模型,格式{{ref(<project or package name>,<model name>)}
示例项目
- 项目结构
platform是需要引用的,userapp 是引用platform 的dbt 项目
- 模型简单说明
platform 参考,就是一个标准的dbt 模型,定义,使用了seed 中的数据
├── README.md
├── analyses
├── dbt_project.yml
├── macros
├── models
│ └── platform
│ ├── my_first_dbt_model__platform.sql
│ └── schema.yml
├── seeds
│ └── app
│ └── app.csv
├── snapshots
└── tests
my_first_dbt_model__platform.sql
{{ config(materialized='table') }}
select * from {{ ref('app') }}
userapp 包模型引用
├── README.md
├── analyses
├── dbt_project.yml
├── logs
│ └── dbt.log
├── macros
├── models
│ └── example
│ ├── my_first_dbt_model__userapp.sql
│ ├── my_second_dbt_model__userapp.sql
│ └── schema.yml
├── packages.yml
├── seeds
├── snapshots
└── tests
packages.yml 引用platform 包
packages:
- local: ../platform
my_second_dbt_model__userapp.sql 引用platform 中的模型
select *
from {{ ref('platform','my_first_dbt_model__platform') }}
- 运行
cd userapp
dbt build
- 数据效果
说明
完整代码参考github,但是注意包中的模型命名最好唯一,同时遵循dbt官方的一些实践
参考资料
https://docs.getdbt.com/docs/build/packages
https://docs.getdbt.com/reference/dbt-jinja-functions/ref
https://hub.getdbt.com/dbt-labs/dbt_utils/latest/
https://github.com/rongfengliang/dbt_package_model_ref
https://docs.getdbt.com/guides/best-practices