---
title: 【Snowflakw×dbt】dbtで実行可能な２つのunit-testを比較してみた
description: Snowflake×dbtのUnit testsを比較。dbt-unit-testingとv1.8の機能違いを検証。データ分析基盤構築に役立つ情報を提供します。INSIGHT LABのSnowflake紹介セミナーもおすすめ。
image: https://knowledge.insight-lab.co.jp/hubfs/dbtcore-1.png
---

![INSIGHT LAB](https://knowledge.insight-lab.co.jp/hs-fs/hubfs/INSIGHT%20LAB_%E6%96%87%E5%AD%97%E3%81%AE%E3%81%BF_WHT-1.png?width=400&height=110&name=INSIGHT%20LAB_%E6%96%87%E5%AD%97%E3%81%AE%E3%81%BF_WHT-1.png)

![INSIGHT LAB](https://knowledge.insight-lab.co.jp/hs-fs/hubfs/INSIGHT%20LAB_%E6%96%87%E5%AD%97%E3%81%AE%E3%81%BF.png?width=400&height=110&name=INSIGHT%20LAB_%E6%96%87%E5%AD%97%E3%81%AE%E3%81%BF.png)

[![お問い合わせ](https://hubspot-no-cache-na2-prod.s3.amazonaws.com/cta/default/5935783/c64a7bb0-e32a-499b-851b-b4e7a66da275.png)](https://hubspot-cta-redirect-na2-prod.s3.amazonaws.com/cta/redirect/5935783/c64a7bb0-e32a-499b-851b-b4e7a66da275)

<https://knowledge.insight-lab.co.jp/snowflake/dbt-unit-test#tmpmodule_159357067471898>

- [Snowflakeとは](https://service.insight-lab.co.jp/snowflake)
- [SNOWFLAKEナレッジ](https://knowledge.insight-lab.co.jp/snowflake)
- [お役立ち資料](https://download.insight-lab.co.jp/snowflake/download)

###### 5 分で読むことができます

# [【Snowflakw×dbt】dbtで実行可能な２つのunit-testを比較してみた](https://knowledge.insight-lab.co.jp/snowflake/dbt-unit-test)

 執筆者 [TAKA](https://knowledge.insight-lab.co.jp/snowflake/author/taka) 更新日時 2024年4月11日

![【Snowflakw×dbt】dbtで実行可能な２つのunit-testを比較してみた](https://knowledge.insight-lab.co.jp/hubfs/dbtcore-1.png)

 目次

みなさん初めまして！INSIGHT LAB株式会社のTAKAと申します。  
私は業務で主にデータ分析基盤の構築を行っており、Snowflakeとdbt coreを使用しています。近頃、dbtがv1.8へアップグレードされ、Unit testsが使えるようになるとのことで、折角なら今現在使えるdbt-unit-testingとどう違うのか、このブログで検証してみようと思います。

## Unit testsとは

そもそも、[Unit tests](https://docs.getdbt.com/docs/build/unit-tests)が何かというと、作成したモデルの**機能**を検証するためのテストとなります。今までのdbt testは、ソースのデータ品質やモデルのアウトプットデータを検証する**データ**のテストがメインで、**機能**を検証するテストはあまり行えませんでした。そのため、今まではdbt-unit-testingというパッケージを使用することで、**機能**検証するためのテストを実施できましたが、v1.8からはなんとパッケージを使用せずとも、dbtの標準機能としてモデルの**機能**を検証するUnit testsが使用できるようになります。

## 検証環境

今回は以下環境で検証します。

- DWH：Snowflake
- ELT：dbt\_core 
    - 1.[dbt-unit-testing](https://github.com/EqualExperts/dbt-unit-testing)を使用：v1.7.11
    - 2.dbtの[v1.8](https://docs.getdbt.com/docs/dbt-versions/core-upgrade/upgrading-to-v1.8)を使用：v1.8.0-b1
- dbtプロジェクト：[jaffle\_shop](https://github.com/dbt-labs/jaffle_shop)

## Unit testsの検証

それでは、Unit testsを検証していきます。

### 1.dbt-unit-testingを使用したUnit tests

まずは、dbt-coreのインストールから行います。DWHにSnowflakeを使用するため、dbt-snowflakeをインストールします。

> pip install dbt-snowflake

次に、Unit testsを実行するために、パッケージdbt-unit-testingをインストールします。パッケージをインストールするには、`packages.yml`に以下コードを記載して、`dbt deps`コマンドでインストールします。

![キャプチャ_dt_packages](https://knowledge.insight-lab.co.jp/hs-fs/hubfs/%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3_dt_packages.png?width=1164&height=227&name=%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3_dt_packages.png)

ちなみに、今回Unit testsでテストするモデルは以下になります。このモデルでは３つのインプットデータを使用して、注文日の最小値や最大値を取得したり、注文ID毎の注文額を集計した後に、１つのテーブルに纏めています。

- [customers.sql](https://github.com/dbt-labs/jaffle_shop/blob/main/models/customers.sql)

それでは、Unit testsに使用するテストを用意します。 今回はjaffle\_shopのdbtプロジェクトフォルダ内のtestsフォルダに、以下テスト用の.sqlファイルを用意します。

![キャプチャ_dbt_sql_input-1](https://knowledge.insight-lab.co.jp/hs-fs/hubfs/%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3_dbt_sql_input-1.png?width=1366&height=649&name=%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3_dbt_sql_input-1.png)

上記の.sqlファイルは、Unit testsに使用するインプットデータとその期待値を表しています。インプットデータの内容は、顧客IDが'1'の顧客の2024年1月1日～5日までの注文履歴を表しており、このインプットデータを元にして、customers.sqlモデルを実行した結果、期待値として設定したデータ通りの結果となることを検証するテストとなっております。今回の期待値としては、顧客IDが'1'の初回注文日や最新注文日、注文額の合計が想定通りになっていることとなります。  
それでは、１つずつ見ていきます。

1行目は、必ず指定する必要があります。

``

3行目では、テストしたいモデルとモデルの説明を記載します。

![キャプチャ2](https://knowledge.insight-lab.co.jp/hs-fs/hubfs/%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A32.png?width=998&height=50&name=%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A32.png)

5行目以降で、テストに使用するインプットのモデルとテストデータを指定します。

インプットのモデル指定には、`mock_ref`以外にもソースを指定する`mock_source`もあり、モデル毎に指定する必要があります。テストデータは、下記のように`mock_ref(mock_source)`内のselectで指定が可能で、複数行設定したい場合は`union`することが可能です。

![キャプチャ_dbt_sql_input](https://knowledge.insight-lab.co.jp/hs-fs/hubfs/%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3_dbt_sql_input.png?width=1266&height=406&name=%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3_dbt_sql_input.png)

23行目でアウトプットとなるテストの期待値を`expect`として指定できます。

![キャプチャ4](https://knowledge.insight-lab.co.jp/hs-fs/hubfs/%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A34.png?width=1212&height=68&name=%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A34.png)

ここまで準備ができれば、実際にテストを行っていきます。テストの実施には、普段通りにdbt test を使用できます。1行目でtagを指定しているため、以下のようにタグを指定してテストも行えます。

> dbt test --select tag:unit-test

テストした結果が以下になります。  
![キャプチャ5](https://knowledge.insight-lab.co.jp/hs-fs/hubfs/%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A35.png?width=1001&height=311&name=%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A35.png)  
テストが正常終了しており、期待値通りの処理が行えていることを確認できました。ここで、`stg_payments`のテストデータを変更して、テストが失敗するパターンを実行してみます。今回はamountの値を+100します。

![キャプチャ_dbt_sql_errot_plus](https://knowledge.insight-lab.co.jp/hs-fs/hubfs/%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3_dbt_sql_errot_plus.png?width=1199&height=172&name=%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3_dbt_sql_errot_plus.png)

再度実行すると、キャプチャのようにエラーとなりました。

![キャプチャ6](https://knowledge.insight-lab.co.jp/hs-fs/hubfs/%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A36.png?width=986&height=547&name=%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A36.png)

期待値に対して、実際にモデルを実行した結果が表示されており、エラーの原因がどこか分かりやすくなってますね。  
ここまでが、dbt-unit-testingを使用したUnit testsとなります。

### 2.v1.8から使用できるUnit tests

続いて、v1.8から使用できるようになったUnit testsを検証していきます。  
こちらでも、まずはdbt-coreのインストールから始めます。

> pip install dbt-core==1.8.0b1
> 
> pip install dbt-snowflake==1.8.0b1

 

v1.8はまだベータ版のため、1.8.0の後ろにベータ版のバージョン(今回であれば、b1)を付けてインストールします。また、v1.8からの変更点として、v1.8以前までは`dbt-snowflake`をインストールするだけでdbtを使えましたが、v1.8からは`dbt-core`もインストールする必要があるため、注意が必要となります。

次に、v1.8で使用するテストを用意します。  
v1.8以前では、パッケージをインストールしてましたが、v1.8ではインストールせずともUnit testsを使えるため、`packages.yml`の記載は省略してUnit testsを記載していきます。`packages.yml`の記載と`dbt deps`を実行する手間が省けるので、この点はv1.8の方が楽ですね。

そして、dbt-unit-testingでは.sqlファイルにコードを記載していましたが、v1.8では.ymlにテストを記載していきます。

![キャプチャ_dbt_customer_test](https://knowledge.insight-lab.co.jp/hs-fs/hubfs/%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3_dbt_customer_test.png?width=1397&height=662&name=%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3_dbt_customer_test.png)

テストの内容としてはdbt-unit-testingと同じになります。v1.8ではmacroを使用しない分、コードが少し短く、かつ、シンプルに感じました。

記載についてですが、1行目でunit\_testを指定し、`name`や`description`を記載します。

![キャプチャ_dbt1-8-name](https://knowledge.insight-lab.co.jp/hs-fs/hubfs/%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3_dbt1-8-name.png?width=758&height=68&name=%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3_dbt1-8-name.png)

4行目の`model`でテストしたい対象のモデルを指定し、`given`以降でテストする条件を指定します。`input`ではインプットとなるモデル、`rows`でインプットデータを設定します。

```

```

`expect`で期待値を指定します。

![キャプチャ8](https://knowledge.insight-lab.co.jp/hs-fs/hubfs/%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A38.png?width=1119&height=76&name=%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A38.png)

.ymlファイルにUnit testsを記載したので、最後にdbt testを行っていきます。`name`を指定しているので、test実施時に`name`を指定してテストすることもできます。

> dbt test --select sample\_test

テストした結果が以下になります。  
![キャプチャ9](https://knowledge.insight-lab.co.jp/hs-fs/hubfs/%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A39.png?width=1154&height=294&name=%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A39.png)  
テストが正常終了しており、期待値通りの処理が行えていることを確認できました。ここでも、`stg_payments`のテストデータを変更して、テストが失敗するパターンを実行してみます。今回はamountの値を-100します。

![キャプチャ_dbt_18_error_test](https://knowledge.insight-lab.co.jp/hs-fs/hubfs/%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3_dbt_18_error_test.png?width=1107&height=122&name=%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3_dbt_18_error_test.png)

再度実行すると、キャプチャのようにエラーとなりました。  
![キャプチャ_dbt_18_error_result](https://knowledge.insight-lab.co.jp/hs-fs/hubfs/%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3_dbt_18_error_result.png?width=1265&height=427&name=%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3_dbt_18_error_result.png)  
dbt\_unit\_testingよりも、結果がシンプルですね。  
以上がv1.8を使用したUnit testsとなります。

## まとめ

dbt\_unit\_testingとv1.8でできるようになったUnit testsを比較してみましたが、パッケージをインストールする手間が減ったり、テストコードをシンプルに書けたりとv1.8の方が使いやすそうと感じました。ただ、dbt\_unit\_testingとv1.8のUnit testsも実務では使っていないので、色々使っていく中で、dbt\_unit\_testingの方が使いやすい場面もあるのかなとも感じました。どちらにしても、モデルの**機能**を検証するテストはとても有用なテストだと感じたので、これから実務にも取り入れていきたいと思います。皆さんも気になれば、ぜひ使ってみてください！

Snowflakeを体験してみませんか？

INSIGHT LABではSnowflake紹介セミナーを定期開催しています。Snowflakeの製品紹介だけでなく、デモンストレーションを通してSnowflakeのシンプルなUI操作や処理パフォーマンスの高さを体感いただけます。

[![詳細はこちら](https://hubspot-no-cache-na2-prod.s3.amazonaws.com/cta/default/5935783/0d0b0d86-fdb7-4351-ab14-d482c854defc.png)](https://hubspot-cta-redirect-na2-prod.s3.amazonaws.com/cta/redirect/5935783/0d0b0d86-fdb7-4351-ab14-d482c854defc)

- [Tweet](https://twitter.com/share)

#### 執筆者 [TAKA](https://knowledge.insight-lab.co.jp/snowflake/author/taka)

###### [前の投稿](https://knowledge.insight-lab.co.jp/snowflake/-data-quality-and-data-metric-functions)

[![](https://knowledge.insight-lab.co.jp/hubfs/Generated%20images/Snowflake%2c%20Database%2c%20Quality.jpeg)](https://knowledge.insight-lab.co.jp/snowflake/-data-quality-and-data-metric-functions)

###### [【Snowflake】テーブルのカラム値の状態や整合性を監視できる「データメトリック関数」を試してみました](https://knowledge.insight-lab.co.jp/snowflake/-data-quality-and-data-metric-functions)

###### [次の投稿](https://knowledge.insight-lab.co.jp/snowflake/-streamlit-practice-visualize-compound-data-easy-freely-customizable)

[![【Streamlit実践】化合物データを可視化 - 簡単・自在にカスタムできる！](https://knowledge.insight-lab.co.jp/hubfs/streamlit-logo-primary-colormark-darktext_edit.png)](https://knowledge.insight-lab.co.jp/snowflake/-streamlit-practice-visualize-compound-data-easy-freely-customizable)

###### [【Streamlit実践】化合物データを可視化 - 簡単・自在にカスタムできる！](https://knowledge.insight-lab.co.jp/snowflake/-streamlit-practice-visualize-compound-data-easy-freely-customizable)

RECOMMEND こちらの記事も人気です。

<https://knowledge.insight-lab.co.jp/snowflake/pricing>

###### 4 分で読むことができます。

##### [Snowflakeの料金体系｜クレジットと費用最適化のポイントをご紹介](https://knowledge.insight-lab.co.jp/snowflake/pricing)

###### 2021年 6月 28日

<https://knowledge.insight-lab.co.jp/snowflake/snowflake-vs-treasuredata>

###### 5 分で読むことができます。

##### [【禁断の比較？】SnowflakeとTreasure Dataを比べてみました](https://knowledge.insight-lab.co.jp/snowflake/snowflake-vs-treasuredata)

###### 2021年 5月 24日

<https://knowledge.insight-lab.co.jp/snowflake/dbt-data-pipeline>

###### 12 分で読むことができます。

##### [【Snowflake×dbt】データパイプライン構築](https://knowledge.insight-lab.co.jp/snowflake/dbt-data-pipeline)

###### 2022年 6月 17日

<https://knowledge.insight-lab.co.jp/snowflake/snowsight-executive-dashboard>

###### 1 分で読むことができます。

##### [Snowsightでどこまでできるか！？限界に挑戦！](https://knowledge.insight-lab.co.jp/snowflake/snowsight-executive-dashboard)

###### 2023年 12月 14日

<https://knowledge.insight-lab.co.jp/snowflake/-snowflake-streamlit-in-snowflake-introduce>

###### 5 分で読むことができます。

##### [【Snowflake】新機能「Streamlit in Snowflake」とは何者か！？](https://knowledge.insight-lab.co.jp/snowflake/-snowflake-streamlit-in-snowflake-introduce)

###### 2023年 9月 21日

<https://knowledge.insight-lab.co.jp/snowflake/function-get-ddl>

###### 2 分で読むことができます。

##### [【Snowflake】get\_ddl関数でオブジェクトの定義を取得して再利用する](https://knowledge.insight-lab.co.jp/snowflake/function-get-ddl)

###### 2020年 7月 28日

##### 運営会社

運営会社

- [会社概要](https://insight-lab.co.jp/about/)
- [お問い合わせ](https://contact.insight-lab.co.jp/main)

##### メニュー

メニュー

- [Snowflakeとは](https://service.insight-lab.co.jp/snowflake)
- [Snowflakeナレッジ](https://knowledge.insight-lab.co.jp/snowflake)
- [お役立ち資料](https://download.insight-lab.co.jp/snowflake/download)

[![INSIGHT LAB](https://knowledge.insight-lab.co.jp/hs-fs/hubfs/INSIGHT%20LAB_%E6%96%87%E5%AD%97%E3%81%AE%E3%81%BF_WHT-1.png?width=200&height=55&name=INSIGHT%20LAB_%E6%96%87%E5%AD%97%E3%81%AE%E3%81%BF_WHT-1.png "INSIGHT LAB")](https://www.insight-lab.co.jp/)

- [プライバシーポリシー](https://www.insight-lab.co.jp/privacy.html)

Copyright © 2020 INSIGHT LAB, Inc.

<https://twitter.com/INSIGHTLAB_INC><https://www.youtube.com/channel/UCOKNKiO4uuza4NioSZpBMhg>