「dbtで始めるデータパイプライン構築〜入門から実践〜」をSnowflakeでやってみる

「[dbtで始めるデータパイプライン構築～入門から実践～](https://zenn.dev/dbt_tokyo/books/537de43829f3a0)」というdbtの入門者向けのチュートリアル記事があります。

https://zenn.dev/dbt_tokyo/books/537de43829f3a0

このチュートリアル記事はdbt CloudとBigQueryを用いたハンズオンで構成されていますが、私がBigQueryをまったく知らないので、Snowflakeに置き換えながら勉強しています。  
本記事では「dbtで始めるデータパイプライン構築～入門から実践～」について、2021年12月からの差分と、BigQueryをSnowflakeに置き換えたときの差分をメモしています。  

英語にはなってしまいますが、dbtの公式ドキュメントにも[Quickstart for dbt Cloud and Snowflake](https://docs.getdbt.com/quickstarts/snowflake?step=1)があるので、そちらで勉強するのもいいかも。  

## Chapter 01 dbtとは？

データエンジニアの見習いとしてお仕事を始めてから読むとありがたさがよく分かる。  
「dbtはデータレイクやデータウェアハウスにあるデータを変換して書き戻すんだよ！」という説明を聞いて、以前は「なんでそんな無駄なことを…？」と思っていたんですが、実際にはdbtがあってもなくても一部分を切り出したテーブルを作ったり全体を綺麗に整えたテーブルを作ったりしないといけないんですよね。  
だったら、デファクトスタンダードなツールを使って、IaC(Infrastructure as Code)的にやるのがベターですよね。  

> 「Jinjaを使った高度なモデリング処理（後ほど公開）」で詳しくご紹介します。

こちらは既に[Chapter 06 Jinjaを使った高度なモデリング](https://zenn.dev/dbt_tokyo/books/537de43829f3a0/viewer/jinja_modeling)として公開済みになっていました。  

## Chapter 02 dbt Cloudのセットアップ

このチャプターではdbt CloudのセットアップとBigQueryへの接続を解説しています。  
私の場合はBigQueryではなくSnowflakeに接続させたいので、ちょこちょこチュートリアル記事と異なるところがあります。  

このチャプターでやっていることは以下のようなことです。  
- BigQueryのサービスアカウント(ユーザ)作成
- BigQueryの鍵の発行
- dbt Cloudのアカウント登録
- dbt Cloudのプロジェクト作成とBigQueryへの接続
- dbt CloudとGitHubの連携

dbt CloudとSnowflakeを接続する方法については、以下のドキュメントに記載があります。  
参考：[Connect Snowflake | dbt Developer Hub](https://docs.getdbt.com/docs/cloud/connect-data-platform/connect-snowflake)  

https://docs.getdbt.com/docs/cloud/connect-data-platform/connect-snowflake

また、Snowflakeのキーペア認証については、以下のドキュメントに記載があります。
参考：[キーペア認証およびキーペアローテーション | Snowflake Documentation](https://docs.snowflake.com/ja/user-guide/key-pair-auth)

https://docs.snowflake.com/ja/user-guide/key-pair-auth

上記のドキュメントをそれぞれ参照しながら設定していきましょう。  

以降、後でまとめます。  

## Chapter 03 チュートリアル：モデル開発の基本

このチャプターでは簡単なモデルを書いて実行するまでを解説しています。  

> **Developに移動**
> 画面左上のハンバーガーメニューを押し、「Develop」を選択してください

UIが更新されたらしく、「Develop」はハンバーガーメニューからアクセスではなくなっています。  
常に見えるところに直接置かれているので迷うことはなさそう。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/d56e5f3a-01cd-1648-5fdb-f0ee4e08466d.png)

> 以下の3ファイルをそれぞれ「data」フォルダの中に格納をしていきます。

文章と画像がちぐはぐなのですが、現在のバージョンでは「seeds」配下がデフォルトのようです。  
それ以外のディレクトリからシードの取り込みを行う場合は```dbt_project.yml```の中の```seed-paths: ["seeds"]```を変更すればいいとのことです。  
参考：[Can I store my seeds in a directory other than the `seeds` directory in my project?](https://docs.getdbt.com/faqs/tests/configurable-data-path)

ここまで進めた時点のディレクトリ構造は以下の通り。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/02b069cc-be83-3272-9781-57eb93d62dda.png)

> **customersテーブルで処理するデータを別のモデルから参照するようにする**

の直下にあるサンプルコードは```models/costomers.sql```を書き換える想定になっています。  
解説されている通りなのですが、最初に```models/costomers.sql```に書いた内容をref機能を使うことで複数ファイルに分割してるということですね。  
ref機能を使うことで、複数ファイルに分割しただけではなく、依存関係も明確になった、と。  

## Chapter 04 チュートリアル：テストとドキュメント

このチャプターでは簡単なテストを行ってドキュメントを生成するまでを解説しています。  

```dbt test```するとエラーが…

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/9fadef14-6e79-4371-acd0-2e6fecac1399.png)

これはdbt Cloudのプロジェクト作成のときに生成されるサンプルのうち、モデル```example/my_first_dbt_model.sql```と、それに対するテスト```example/schema.yml```のせいですね。  

```example/my_first_dbt_model.sql```では値が1の行と値がnullの行を出力しています。

```sql:my_first_dbt_model.sql
with source_data as (

    select 1 as id
    union all
    select null as id

)
```

以下はSnowflakeに実際にロードされた内容。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/66ed9a18-3346-b5da-3f16-2a4c314ac48e.png)

それに対して```example/schema.yml```では```not_null```のテストを実行しているので、必ずエラーが出るようになっている…というサンプルのようです。  
これ以降、「example」配下のファイルを使うことはなさそうなので、削除してもよさそう。  

「example」配下のファイルを削除して無事にテストが成功。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/e0b43d29-e6f2-bd6c-d6ce-fd9711d4dadb.png)

続いての「モデルのドキュメントを作る」について、YAMLファイルは具体的に何が変わっているかというと、以下の通りです。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/0f77b10e-9682-03e7-c4af-55866c8dfbdc.png)

YAMLファイルにdescriptpionを書くことで、```dbt docs generate```してモデルのドキュメントを作れるようになる、というチュートリアルでした！  

> 画面左上に「view docs」というリンクが有効になり、そこからドキュメントが見れるようになります

2023年8月時点ではここにあるアイコンでした。  

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/37f8fc53-e170-cace-2ea4-cc7053b8ae12.png)

## Chapter 05以降

後日追記予定。  
のんびりと勉強していきます。