四时宝库

程序员的知识宝库

数据开发工具dbt手拉手教程-12.dbt包管理

在软件开发中,通常会将代码模块化到库中,以便利用已有的代码来提高效率。这使得程序员可以更专注于自己的业务逻辑,而不必花费过多时间在实现已有代码方面。

在dbt中,像这样的库被称为包。dbt的软件包非常强大,因为我们遇到的许多分析问题都是跨组织共享的,例如:

  • 从结构一致的数据集中转换数据
  • 编写执行类似功能的dbt宏
  • 为数据项目中使用的特定工具构建模型和宏

dbt包是一个独立的dbt项目,其中包含解决特定问题领域的模型和宏。作为dbt用户,可以通过添加包来将其包含在您自己的项目中,以便使用包中的模型和宏,因此可以实现 以下目标:

  • 当dbt run命令时,包中的模型将具体化保存到目标数据仓库中。
  • 可以在自己的模型中使用ref来引用包中的模型。
  • 可以在自己的项目中使用包中的宏。

如何在项目中调用其他的包?

  1. 将packages.yml文件添加到dbt项目中,与dbt_project.yml文件处于同一级别。
  2. 使用支持的语法之一指定要添加的包,例如在packages.yml文件中配置如下:
packages:
  - package: dbt-labs/snowplow
    version: 0.7.0

  - git: "https://github.com/dbt-labs/dbt-utils.git"
    revision: 0.9.2

  - local: /opt/dbt/redshift
  1. 运行dbt-deps以安装程序包。包安装在dbt_packages目录中——默认情况下,git会忽略此目录。

包的调用

根据包的保存位置,可以使用以下方法之一指定包。

Git包

存储在Git服务器上的包可以使用Git语法安装,如下所示:packages.yml

packages:
  - git: "https://github.com/dbt-labs/dbt-utils.git" # git URL
    revision: 0.9.2 # tag或者分支名称

添加包的Git URL,并可选择指定版本。 版本可以是:

  • 分支名称
  • 发布的tagged
  • 提交git产生的hash字符串,例如:
packages:
  - git: "https://github.com/dbt-labs/dbt-utils.git"
    revision: 4e28d6da126e2940d17f697de783a717f2503188

内部托管的tarball URL

有些公司有只从内部服务获取资源的安全要求。为了满足从托管环境(如云存储)安装包的需求,dbt Core使您能够从内部托管的tarball URL安装包。

packages:
  - tarball: https://codeload.github.com/dbt-labs/dbt-utils/tar.gz/0.9.6
    name: 'dbt_utils'

其中名称:“dbt_utils”指定为要安装的包源代码创建的dbt_packages的子文件夹。

私有包

使用命令行可以通过SSH和SSH密钥克隆私有包,使用SSH密钥进行身份验证时无需每次提供用户名和密码。

packages:
  - git: "git@github.com:dbt-labs/dbt-utils.git" # git SSH URL

另外Git Token方法允许用户通过HTTPS通过环境变量传入git令牌进行克隆。例子如下:

packages:
  # 通过github应用程序令牌访问存储库时使用此格式
  - git: "https://{{env_var('DBT_ENV_SECRET_GIT_CREDENTIAL')}}@github.com/dbt-labs/awesome_repo.git" # git HTTPS URL

  # 通过私有访问令牌访问存储库时使用此格式
  - git: "https://{{env_var('DBT_ENV_SECRET_GIT_CREDENTIAL')}}@github.com/dbt-labs/awesome_repo.git" # git HTTPS URL
 
   # 通过细粒度的私有访问令牌访问存储库时使用此格式(有时需要用户名)
  - git: "https://GITHUB_USERNAME:{{env_var('DBT_ENV_SECRET_GIT_CREDENTIAL')}}@github.com/dbt-labs/awesome_repo.git" # git HTTPS URL

本地包

可以通过指定项目的路径来安装本地存储的包,如下所示:

packages:
  - local: /opt/dbt/redshift # use a local path

配置包

可以从dbt_project.yml文件中配置包中的模型和seeds,如下所示:

vars:
  snowplow:
    'snowplow:timezone': 'America/New_York'
    'snowplow:page_ping_frequency': 10
    'snowplow:events': "{{ ref('sp_base_events') }}"
    'snowplow:context:web_page': "{{ ref('sp_base_web_page_context') }}"
    'snowplow:context:performance_timing': false
    'snowplow:context:useragent': false
    'snowplow:pass_through_columns': []

models:
  snowplow:
    +schema: snowplow

seeds:
  snowplow:
    +schema: snowplow_seeds

上面例子是需要配置变量来命名包含原始数据表的名称,尤其是在使用特定于数据集的包时。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接