dbt 包依赖简单测试

dbt 包含一个自己的包管理,可以使用git 等工具,还是很方便的,可以方便的进行代码共享,实现复用

创建简单包

实际上就是一个简单的dbt 项目,参考项目 https://gitlab.com/dalongrong/dbt-gitlab-demo

  • 创建简单包
dbt init gitlab-demo
  • 修改配置
    主要是包信息的修改,同时添加了一些macro,方便调用,具体代码可以参考上面的gitlab
get_versions_schema.sql:
{% macro get_versions_schema() -%}
{%- set defaultname =demo -%}
dalongdemo
{%- endmacro %}
gitlab_projectinfo_info.sql:
{% macro gitlab_projectinfo_info() -%}
projects
{%- endmacro %}

创建引用包的项目

创建方式同上,就是一个包地址的配置,以及调用,参考项目 https://gitlab.com/dalongrong/dbt-package-demo

  • 创建项目
dbt init  package-demo
  • 项目信息修改

    主要是名称,以及版本信息,可以直接使用默认的,但是建议按照有意义的名称命名

dbt_project.yml文件:
name: 'packageapp'
version: '1.0'
profile: 'demo'
source-paths: ["models"]
analysis-paths: ["analysis"] 
test-paths: ["tests"]
data-paths: ["data"]
macro-paths: ["macros"]
target-path: "target" # directory which will store compiled SQL files
clean-targets: # directories to be removed by `dbt clean`
    - "target"
    - "dbt_modules"
models:
  packageapp:
      base:
          materialized: view

配置项目依赖

  • 添加依赖
dbt_project.yml 文件:
name: 'packageapp'
version: '1.0'
profile: 'demo'
source-paths: ["models"]
analysis-paths: ["analysis"] 
test-paths: ["tests"]
data-paths: ["data"]
macro-paths: ["macros"]
target-path: "target" # directory which will store compiled SQL files
clean-targets: # directories to be removed by `dbt clean`
    - "target"
    - "dbt_modules"
repositories:
  - https://gitlab.com/dalongrong/dbt-gitlab-demo.git
models:
  packageapp:
      base:
          materialized: view
  • 使用

    主要是调用包的macro

models/packageapp/base/packageapp_projectinfo.sql:
{{ config(materialized='view') }}
select * from {{ref(gitlab.gitlab_projectinfo_info())}}  # 使用ref 进行包macro 的引用,使用使用ref 的方式调用,保证依赖顺序

运行&&测试&&文档

  • 添加依赖
dbt deps
  • 运行
dbt  run && dbt docs generate && dbt docs serve
  • 效果


说明

对于profile 的配置,上面没有写,参考基本配置就可以了,数据库可以直接使用项目中的docker-compose 运行即可
macro 以及model 引用方式

macro 需要加上pacakge 的名称model 可以使用类似普通的方式,比如gitlab 包中的gitlab_projectinfo 可以按照
 select * from {{ref('gitlab_projectinfo')}} 
方式引用,所以model 的命名比较重要,这个在最佳实践中有说明

参考资料

https://gitlab.com/dalongrong/dbt-package-demo
https://gitlab.com/dalongrong/dbt-gitlab-demo
https://docs.getdbt.com/docs/macros
https://docs.getdbt.com/docs/building-packages
https://docs.getdbt.com/docs/package-management
https://gitlab.com/dalongrong/dbt-docker-graphql-demo

posted on   荣锋亮  阅读(814)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示