dbt 包的构建
dbt的包是一种可以复用的代码,可以方便进行模型的共享
创建一个包
和普通的dbt 项目类似
- 初始化(init)
dbt init [packagename]
- 目录结构
文件:
README.md
dbt_project.yml
目录:
models/
macros/
tests/
analysis/
*## 包信息修改
- dbt_project.yml
修改name version 以及设置profile 同时移除多余的models 配置
参考配置
dbt_project.yml:
name: 'mailchimp'
version: '0.0.1'
# HEY! Make sure you have a `mailchimp` profile
# defined in ~/.dbt/profiles.yml
profile: 'mailchimp'
source-paths: ["models"]
analysis-paths: ["analysis"]
test-paths: ["tests"]
data-paths: ["data"]
macro-paths: ["macros"]
target-path: "target"
clean-targets:
- "target"
- "dbt_modules"
models:
~/.dbt/profiles.yml:
# Place this at the bottom of your `~/.dbt/profiles.yml` file,
# below any other profiles that you've already defined
# Use the value you set for `profile:` in the `dbt_project.yml` file here
mailchimp:
target: dev
outputs:
dev:
type: xxx
host: xxx
user: xxx
pass: xxx
port: xxx
dbname: xxx
schema: package_mailchimp # call this whatever makes sense for you
构建一个dbt 包
- 确保包的通用性
- 使用变量指向原始数据
不能进行硬编码,可以通过基础模型中的变量进行选择
参考 https://docs.getdbt.com/reference#var
{{ config(materialized='ephemeral') }}
select * from {{ var('mailchimp:campaigns_table') }}
- 模型的前缀
推荐是添加上包名 ,比如mailchimp_campaigns.sql 使用这个就比campaigns.sql好 - 默认使用视图
这个在官方的最佳实践中也说明了,同时基础模型使用ephemeral
- 应该进行测试
可以使用自定义数据进行测试 - 文档化包的使用说明以及信息
包含描述、包的依赖图、变量,可以参考 https://github.com/fishtown-analytics/snowplow
发布包
发布包可以使用github 等源代码工具,可以方便的共享,同时我们已经版本化包的代码,同时
有相关的问题说明,对于破坏性的变更可以方便使用者进行权衡。
参考资料
https://docs.getdbt.com/docs/testing
https://docs.getdbt.com/reference#var
https://github.com/fishtown-analytics/snowplow