dbtの”Analyses and Seeds”コースを受講してみた

dbtの”Analyses and Seeds”を受講してみた

はじめに

データアナリティクス事業本部のおざわです。 いよいよバスケのBリーグ2023-24シーズンが開幕ですね!

今回もdbt公式の入門コースの中から1つ試してみたので共有します。

コース概要

本コースは、Beginnerカテゴリに分類されており、初心者向けのコースになっています。ボリューム的には、前回までに受講した2つのコース("dbt Fundamentals", "Jinja, Macros, Packages")と比較するとかなり軽めになっています。所要時間としては、字幕ありの15分の動画と30分ほどのハンズオンとなっています。

各章メモ

1. What are analyses?

Analysesは、プロジェクトのanalysesフォルダにあるSQLファイルです。Jinjaも使えるのでdbt compileでコンパイルできます。ただ、このSQLファイルはモデルでもなく、テストでもありません(?)ではなんなのか?

プロジェクトや開発者によって異なりますが、学習目的でJinjaを使ったSQLがコンパイルされた結果どうなるのか確認したり、既存のモデルをリファクタリングする際の動作確認をしたり、という使い方をするようです。

Analysesについては、こちらの記事もご参照ください。

2. What are seeds?

Seedsは、dbtプロジェクトのseedsフォルダ(※)にあるCSVファイルのことです。このフォルダにCSVファイルを置いてdbt seedコマンドを実行すると、CSVの内容をテーブルにロードしてくれます。テーブルを参照するには、モデルを呼び出すときと同じようにref関数を使用します。

seedsの対象になるデータは、変更が頻繁なデータや大規模なデータではなく、国コードのようにあまり変化がない小規模なデータということでした。

※dbt 1.0.0より前のバージョンではdataというフォルダ名でした。

3. Implementing Analysis

1章で知った内容を実際にdbt Cloudで試します。

ここで、AnalysesにあるSQLと普通のモデルとの違いを説明されてようやく少し腹落ちしました。モデルとの違いは、analysisはマテリアライズ(テーブル、ビュー化)されないという点です。ただマクロなどは普通のモデルと同じように使えるので、analysesフォルダにSQL置いていろいろ試せちゃうよ、ということかなと理解しました。

analysesのSQLファイルがコンパイルされるとcompiledフォルダに出力されます。

4. Implementing Seeds

本章ではseedsフォルダの下に実際にseedを作っていきます。employees.csvの拡張子を除いたファイル名がテーブル名と対応しています。この場合はemployeesテーブルが作成されます。CSVを作成してからdbt seedコマンドを実行すると、dbtがCSVを読み込んでDWHにテーブルを作成してくれます。

データ型はどうやって決まるの?と不思議に思ったのですが、データ型についてはdbtがCSVから勝手に推測してくれます。必要であれば以下のようにプロジェクトの設定ファイルで明示的に指定することも可能です。

dbt_project.yml

# dbt_project.yml
seeds:
  jaffle_shop: # you must include the project name
    warehouse_locations:
      +column_types:
        zipcode: varchar(5)

seedもモデルと同様、YAMLでテストやドキュメントを書くことができます。

seeds/schema.yml

# seeds/schema.yml
version: 2

seeds:
  - name: country_codes
    description: A mapping of two letter country codes to country names
    columns:
      - name: country_code
        tests:
          - unique
          - not_null
      - name: country_name
        tests:
          - unique
          - not_null

seedのテーブルを参照するには、他のモデルと同じようにref関数を使います。また、テストする時は、モデルのときと同様のコマンドを実行します。

dbt test --models employees

おわりに

短めのコースでしたが、いままでなんだかよくわからなかったanalysesとseedsについて知ることができました。引き続き公式のdbtコースを受講してみたいと思います。

参考リンク