🤖

【dbt Docs】Building a dbt Project - Packages

2022/03/16に公開

Packages

https://docs.getdbt.com/docs/building-a-dbt-project/package-management

What is a package?

ソフトウェアエンジニアは、コードをライブラリにモジュール化することがよくあります。これらのライブラリは、プログラマーが活用して操作するのに役立ちます。プログラマーは、独自のビジネスロジックに集中できる。

How do I add a package to my project?

(プロジェクトにパッケージを追加するにはどうすればいい?)

  • packages.ymlをトップレベルディレクトリ( dbt_project.ymlと同じ階層)に作成する。
packages.yml
packages:
  - package: dbt-labs/snowplow
    version: 0.7.0

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

  - local: /opt/dbt/redshift
  • dbt depsをつかって、パッケージをインストールする。dbt_packagesディレクトリにインストールされる。このディレクトリは、Gitには上がらない(ignoreされる)

How do I specify a package?

(パッケージを指定するにはどうすればいい?)

Hub packages (recommended)

dbt Hub を使うのが良き

packages.yml
packages:
  - package: dbt-labs/snowplow
    version: 0.7.3 # version number

バージョンは指定したほうがいい。(下記のように範囲的に指定することもできる)

packages.yml
packages:
  - package: dbt-labs/snowplow
    version: [">=0.7.0", "<0.8.0"]

dbt Hubを介して入れたほうがいい。パッケージの依存関係も自動で判別してくれるし、同じパッケージを重複していれる必要もない。

Prerelease versions

デフォルトでは正式版までしか入らない。プレリリースのものを試したいこともあるだろうから、できる方法はある
プレリリースのバージョニング 0.4.5a2みたいなのを指定する

packages:
  - package: brooklyn-data/dbt_artifacts
    version: 0.4.5a2

install-prereleaseフラグを有効にする

packages:
  - package: brooklyn-data/dbt_artifacts
    version: [">=0.4.4", "<0.4.6"]
    install-prerelease: true

Git packages

packages.yml
packages:
  - git: "https://github.com/dbt-labs/dbt-utils.git" # git URL
    revision: 0.1.21 # tag or branch name 

リリース名を指定して、パッケージを特定のリリースに「固定」することを強くお勧めします

Private packages

SSH Key Method

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

Git Token Method

環境変数を介してGitTokenを渡すことができる。

packages.yml
packages:
  - git: "https://{{env_var('DBT_ENV_ECRET_GIT_CREDENTIAL')}}@github.com/dbt-labs/awesome_repo.git" # git HTTPS URL

他にも色々やり方はあるみたい・・・

Project subdirectories

packages.yml
packages:
  - git: "https://github.com/dbt-labs/dbt-labs-experimental-features" # git URL
    subdirectory: "materialized-views" # name of subdirectory containing `dbt_project.yml`

Local packages

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

What packages are available?

(どんなパッケージがある?)
dbt Hub で調べるといいです

Advanced package configuration

Updating a package

packages.ymlを更新しても、パッケージは自動更新されない。dbt depsコマンドでパッケージを更新する。

Uninstalling a package

packages.ymlから削除しても、自動的には削除されない。dbt_packages/ディレクトリに残る。もししっかり削除したい場合は

  • dbt_packages/ディレクトリを削除する
  • dbt cleanを実行し、パッケージを削除、その後 dbt depsを実行する

Configuring packages

dbt_project.yml ファイルからパッケージ内のモデルやシードを設定することができます。

dbt_project.yml
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

Specifying unpinned Git packages

Setting two-part versions

Discussion