---
title: 【Snowflake×dbt】dbt の Packages を使ってみた
description: "dbt の Packages の利用方法について解説します。\ndbt の Packages とは、Python のライブラリのようなもので、コードをモジュール化して後で簡単に実装できるようにしたものです。dbt Package 自体は単体の dbt プロジェクトで、それぞれモデルとマクロを備えています。プロジェクトにパッケージをインストールすると、パッケージのモデルとマクロが、自分のプロジェクトの一部になります。"
---

[Snowflake Knowledge - INSIGHT LAB](https://knowledge.insight-lab.co.jp/snowflake)

# [【Snowflake×dbt】dbt の Packages を使ってみた](https://knowledge.insight-lab.co.jp/snowflake/-snowflakedbt-dbt-packages)

 作成者: [橋口](https://knowledge.insight-lab.co.jp/snowflake/author/橋口)｜2022年12月20日

## dbtとは

dbt (data build tool) は、データパイプラインを構築するためのツールです。データの前処理（ELT）におけるTransform（変換）を担当し、SELECT文を記述するだけでデータウェアハウス内のデータを変換できます。

公式リンク：[https://www.getdbt.com/](https://www.getdbt.com/)

公式ドキュメント：[https://docs.getdbt.com/docs/introduction](https://docs.getdbt.com/docs/introduction)

## Packages とは

dbt の Packages とは、Python のライブラリのようなもので、コードをモジュール化して後で簡単に実装できるようにしたものです。dbt Package 自体は単体の dbt プロジェクトで、それぞれモデルとマクロを備えています。プロジェクトにパッケージをインストールすると、パッケージのモデルとマクロが、自分のプロジェクトの一部になります。

- つまり・・・ 
    - パッケージ内のモデルは "dbt run" を実行すると実体化される
    - 自分のモデル内で "ref" を使って、パッケージ内のモデルを参照できる
    - 自分のプロジェクト内で、パッケージ内のマクロを使用できる

 今回は実際にパッケージをインストールして、中の機能を一部使ってみようと思います。

## 実行

Packages は [dbt Package Hub](https://hub.getdbt.com/) の中から必要なものを選んでインストールすることができます。代表的な Packages だと、dbt\_utils や codegen があります。

例

 

| dbt\_utils.get\_column\_values() | 特定のリレーションの列の一意の値を配列として返します。 |
| --- | --- |
| dbt\_utils.get\_relations\_by\_pattern() | 指定されたスキーマ名またはテーブル名のパターンに一致する関係のリストを返します。 |
| dbt\_utils.deduplicate() | モデル、ソース から重複行を削除するために必要な sql を返します。 |
| codegen.generate\_base\_model() | ベース モデルの SQL を生成し、それをモデルに貼り付けることができます。 |
| codegen.generate\_model\_yaml() | モデルのリストの YAML を生成し、これを schema.yml ファイルに貼り付けることができます。 |

 

今回は [dbt Package Hub](https://hub.getdbt.com/) の中から [dbt\_snow\_utils](https://hub.getdbt.com/entechlog/dbt_snow_utils/latest/) を使ってみようと思います。

### インストール

まずはインストール。「dbt\_project.yml」 と同じ階層に 「packages.yml」 を作成して、以下のように記述します。

保存して、コンソールで "dbt deps" コマンドを実行してインストール完了です。パッケージをいくつも追加したい場合もこのファイル内に続けて "- package: ~" と、追加したいパッケージを続けて記述して実行すればOKです。

dbt\_snow\_utils に機能はいくつかありますが、CLONEマクロとDELETEマクロを使用してみたいと思います。

### dbt\_snow\_utils.clone\_table

このマクロは、テーブルを宛先のデータベース、スキーマに複製します。引数は以下。

- 引数 
    - source\_table（必須） : ソーステーブル名
    - destination\_table（必須） : 宛先テーブル名
    - source\_database（オプション） : ソースデータベース名
    - source\_schema（オプション） : ソーススキーマ名
    - destination\_database（オプション） : 宛先データベース名
    - destination\_schema（オプション） : 宛先スキーマ名

 

今回は以下の 「ST\_POST」 テーブルを複製しようと思います。

 

宛先はあらかじめ準備した以下のテーブル。中身は空です。 

 

実行コマンドと引数をコンソールに入力して実行。引数多い・・・。

 

Snowflakeを確認するとデータが入っていました。

 

Query History で実行されたクエリを確認すると、CREATE TABLE されているので、あらかじめテーブルを作る必要もないですね。

 

存在しないテーブルを宛先に指定して実行。

 

Snowflakeにはちゃんとテーブル作成されていました。

 

次にオプションの引数を消して実行してみます。

 

dbt でデフォルトで設定しているデータベースとスキーマにテーブルが作成されました。

 

### dbt\_snow\_utils.delete\_records\_by\_column

このマクロはWhere句に基づいてテーブルからデータを削除します。引数は以下。

 引数

- del\_key（必須） : 削除のWHERE句の列名
- del\_value（必須） : 削除のWHERE句の列名の値
- database（オプション） : データベース名
- schema（オプション） : スキーマ名
- table（オプション） : テーブル名

 

今回は先ほど作成した以下の 「FT\_POST\_DBT」 テーブルからデータを削除してみようと思います。

先ほどと同様に、実行コマンドと引数をコンソールに入力して実行。

 

データを確認すると "code=3" のレコードが削除されていました。

Query History を確認すると、ちゃんとDELETE文が実行されていました。

 

## まとめ

今回は dbt Packages の中から dbt\_snow\_utils のパッケージを使用してみました。似たようなパッケージで snowflake\_utils や データマスキングのための dbt\_snow\_mask など、他にも様々なパッケージがあります。使ってみたらまた記事にしようと思います。

 

- 参考 
    - dbt - Packages : <https://docs.getdbt.com/docs/build/packages>[https://docs.getdbt.com/docs/build/packages](https://docs.getdbt.com/docs/build/packages)
    - dbt - Package Hub : <https://hub.getdbt.com/>[https://hub.getdbt.com/](https://hub.getdbt.com/)
    - dbt\_snow\_util : <https://hub.getdbt.com/entechlog/dbt_snow_utils/latest/>[https://hub.getdbt.com/entechlog/dbt\_snow\_utils/latest/](https://hub.getdbt.com/entechlog/dbt_snow_utils/latest/)

[完全な記事を表示](https://knowledge.insight-lab.co.jp/snowflake/-snowflakedbt-dbt-packages)

```json
{
  "@context" : "http://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "橋口"
  },
  "dateModified" : "2022-12-20T01:27:05.592Z",
  "datePublished" : "2022-12-20T01:27:05Z",
  "headline" : "【Snowflake×dbt】dbt の Packages を使ってみた",
  "image" : {
    "@type" : "ImageObject",
    "height" : 205,
    "url" : "https://download.insight-lab.co.jp/hubfs/image-png-Dec-15-2022-11-38-44-7037-AM.png",
    "width" : 470
  },
  "mainEntityOfPage" : "https://knowledge.insight-lab.co.jp/snowflake/-snowflakedbt-dbt-packages",
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "height" : 60,
      "url" : "/hs/hsstatic/content_shared_assets/static-1.4092/img/default-amp-logo.png",
      "width" : 60
    },
    "name" : "snowflakeナレッジ"
  }
}
```